RestTemplate小记
一。简介
RestTemplate简介:简化了发起HTTP请求以及处理响应的过程,并且支持REST。
DELETE | delete |
GET | getForObject |
getForEntity | |
HEAD | headForHeaders |
OPTIONS | optionsForAllow |
POST | postForLocation |
postForObject | |
PUT | put |
any | exchange |
execute |
delete() 在特定的URL上对资源执行HTTP DELETE操作
exchange()
在URL上执行特定的HTTP方法,返回包含对象的ResponseEntity,这个对象是从响应体中
映射得到的
execute() 在URL上执行特定的HTTP方法,返回一个从响应体映射得到的对象
getForEntity() 发送一个HTTP GET请求,返回的ResponseEntity包含了响应体所映射成的对象
getForObject() 发送一个HTTP GET请求,返回的请求体将映射为一个对象
postForEntity()
POST 数据到一个URL,返回包含一个对象的ResponseEntity,这个对象是从响应体中映射得
到的
postForObject() POST 数据到一个URL,返回根据响应体匹配形成的对象
headForHeaders() 发送HTTP HEAD请求,返回包含特定资源URL的HTTP头
optionsForAllow() 发送HTTP OPTIONS请求,返回对特定URL的Allow头信息
postForLocation() POST 数据到一个URL,返回新创建资源的URL
put() PUT 资源到特定的URL
ForEntity():封装了返回的响应信息,包括 响应状态,响应头 和 响应体。
ForObject():用来只获取 响应体信息。
getForObject 和 getForEntity 用法几乎相同,只是返回值返回的是 响应体,省去了我们 再去 getBody() .
RestTemplate优点:连接池、超时时间设置、支持异步、请求和响应的编解码。
二。配置及使用
1.maven中引入jar包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.配置类:
package demo.rest;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter4;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;
import java.nio.charset.StandardCharsets;
import java.util.List;
/**
* description:
* author: yangzihe
* date: 2019-04-26 16:17
**/
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(ClientHttpRequestFactory factory){
RestTemplate restTemplate = new RestTemplate(factory);
//重新设置StringHttpMessageConverter字符集为UTF-8,解决中文乱码问题
// List<HttpMessageConverter<?>> converterList = restTemplate.getMessageConverters();
// HttpMessageConverter<?> converterTarget = null;
// for (HttpMessageConverter<?> item : converterList) {
// if (StringHttpMessageConverter.class == item.getClass()) {
// converterTarget = item;
// break;
// }
// }
// if (null != converterTarget) {
// converterList.remove(converterTarget);
// }
// converterList.add(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
//加入FastJson转换器
//converterList.add(new FastJsonHttpMessageConverter());
return restTemplate;
}
@Bean
public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setConnectTimeout(5000);//连接超时5秒,默认-1
factory.setReadTimeout(30000);//读取超时30秒,默认-1
return factory;
}
}
三。使用(它是可以直接使用的,不需要配置任何东西,依赖都可以不引):
@Autowired
RestTemplate restTemplate;