初始化
RestTemplate未来是要被弃用的,现在推荐使用webclient。
如果轻度使用,直接new一个RestTemplate就可以。
最小引用包是spring-web,如果引入spring-boot-starter-web这种很重的包会顺带启动tomcat。
在service中自动注入RestTemple restTemple.
自动注入需要先实力化,可以在启动类中(spring的各种初始化没认真看,得找个时间细学一下)
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
使用
post
MultiValueMap<String,String> params = new LinkedMultiValueMap<>();
params.add("key","value");
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("url");
URI uri = builder.build().encode().toUri();
ResponseEntity<MyClass> response = restTemplate.postForEntity(uri,params,MyClass.class);
get
restTemplate.getForEntity(uri,MyClass.class);
get方法拼接参数
// request url
String url = "https://google.com/search?q={q}";
// create an instance of RestTemplate
RestTemplate restTemplate = new RestTemplate();
// make an HTTP GET request
String html = restTemplate.getForObject(url, String.class, "java");
response.getBody();
中文乱码问题:
restTemplate.getMessageConverters().set(1,new StringHttpMessageConverter(StandardCharsets.UTF_8));
测试
自动注入RestTemplate restTemplate,自己初始化一个也可以。
创建一个MockRestServiceServer实例
public void setUp() {
RestGatewaySupport gateway = new RestGatewaySupport();
gateway.setRestTemplate(restTemplate);
mockServer = MockRestServiceServer.createServer(gateway);
}
在Test方法中
mockServer.expect(ExpectedCount.once(), MockRestRequestMatchers.requestTo(url))
.andExpect(MockRestRequestMatchers.method(HttpMethod.POST))
.andExpect(MockRestRequestMatchers.content().formData(params))
.andRespond(MockRestResponseCreators.withStatus(HttpStatus.OK)
.contentType(MediaType.APPLICATION_JSON_UTF8)
.body(response));