springcloud服务之间的调用
- http客户端工具 HttpClient OKHttp URLConnection
- Spring对http的客户端进行封装,提供了工具类叫RestTemplate
Spring的RestTemplate
Spring提供了一个RestTemplate模板工具类,对基于Http的客户端进行了封装,并且实现了对象与json的序列化和 反序列化,非常方便。RestTemplate并没有限定Http的客户端类型,而是进行了抽象,目前常用的3种都有支持:
- HttpClient
- OkHttp
- JDK原生的URLConnection(默认的)
案例:
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
启动类:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
public class HttpDemoApplication {
public static void main(String[] args) {
SpringApplication.run(HttpDemoApplication.class, args);
}
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
controller
package cn.bufanli.httpdemo.controller;
import cn.bufanli.httpdemo.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
/**
* @author yd
* @version 1.0
* @date 2020/9/1 22:20
*/
@RestController
@RequestMapping("user")
public class UserController {
@GetMapping("/8")
@ResponseBody
public User getUser(){
User user = new User();
user.setAge(100);
user.setBirthday(new Date());
user.setId(1111L);
user.setName("爱因斯坦");
user.setPassword("980224");
user.setSex(1);
user.setUpdated(new Date());
user.setUserName("火云邪神");
return user;
}
@GetMapping("/string")
public String getString(){
return "user";
}
}
pojo
package cn.bufanli.httpdemo.pojo;
import lombok.Data;
import java.util.Date;
@Data
public class User {
private Long id;
// 用户名
private String userName;
// 密码
private String password;
// 姓名
private String name;
// 年龄
private Integer age;
// 性别,1男性,2女性
private Integer sex;
// 出生日期
private Date birthday;
// 创建时间
private Date created;
// 更新时间
private Date updated;
// 备注
private String note;
}
test
package cn.bufanli.httpdemo;
import cn.bufanli.httpdemo.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.web.client.RestTemplate;
@SpringBootTest
class HttpDemoApplicationTests {
@Test
void contextLoads() {
}
@Autowired
private RestTemplate restTemplate;
@Test
public void test(){
String url = "http://localhost:8080/user/8";
//restTemplate可以对json格式字符串进行反序列化
User user = restTemplate.getForObject(url, User.class);
System.out.println(user);
}
}