Spring Boot 中的 RestTemplate
在springboot中,有两种方式去配置:
- 自己new 新建一个RestTemplate实例作为bean 放到容器当中
- springboot 给我们提供了一个RestTemplateBuilder,通过RestTemplateBuilder.build()去获得一个RestTemplate
RestTemplate中的常用方法:
GET请求:
- getForObject() / getForEntity()
POST请求:
- postForObject() /postForEntity()
PUT请求:
- put()
DELETE请求:
- delete()
构造 URI
-
UriComponentsBuilder
构造 URI -
ServletUriComponentsBuilder
构造相对于当前请求的 URI -
MvcUriComponentsBuilder
构造指向 Controller 的 URI
常用构造方式:
URI uri = UriComponentsBuilder.fromUriString("http://localhost:8080/hotels/{hotel}?q={q}").build("west", "123");
URI uri = UriComponentsBuilder.fromUriString("http://localhost:8080/hotels/{hotel}") //基本的http头.queryParam("q", "{q}") //增加一个传入变量.encode() //默认编码.buildAndExpand("west", "123") //传入一个数据.toUri(); //构建url
UriComponents uriComponents = MvcUriComponentsBuilder.fromMethodCall(on(BookingController.class).getBooking(21)).buildAndExpand(42);URI uri = uriComponents.encode().toUri();
实例
@SpringBootApplication
@Slf4j
public class coffeetest implements ApplicationRunner {@Autowiredprivate RestTemplate restTemplate;public static void main(String[] args) {new SpringApplicationBuilder().sources(coffeetest.class) //将这个类作为配置.bannerMode(Banner.Mode.OFF) //关闭启动图案.web(WebApplicationType.NONE) //关闭tomcat.run(args);// 将命令行参数输入并启动}@Beanpublic RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder){//return new RestTemplate();return restTemplateBuilder.build();}@Overridepublic void run(ApplicationArguments args) throws Exception {URI build = UriComponentsBuilder.fromUriString("http://localhost:8080/coffee/{id}").build(1);// 构建一个uriResponseEntity<Coffee> c = restTemplate.getForEntity(build, Coffee.class);// get请求操作log.info("Response Status: {}, Response Headers: {}", c.getStatusCode(), c.getHeaders().toString());//获取状态响应码 获取log.info("Coffee: {}", c.getBody());String coffeeUri = "http://localhost:8080/coffee/";Coffee request = Coffee.builder().name("Americano").price(BigDecimal.valueOf(25.00)).build();Coffee response = restTemplate.postForObject(coffeeUri, request, Coffee.class);//get请求log.info("New Coffee: {}", response);String s = restTemplate.getForObject(coffeeUri, String.class); //get请求操作log.info("String: {}", s);}
}
结果
分析
执行该程序之前,先启动https://editor.csdn.net/md/?articleId=103654374(?解 Spring MVC 的切入点)的代码。否则,报错。
我们可以看出通过getStatusCode()方法,取出了该条uri执行后的状态返回码,通过getHeaders()方法,返回了返回信息的格式(编码、时间等等),使用postForObject,进行post发送请求操作,使用getForObject进行get接收请求操作。