1. 集成
配置@Bean
import com.netflix.loadbalancer.*;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
/**
* @Author:壹心科技BCF项目组 wangfan
* @Date:Created in 2020/10/5 13:18
* @Project:epec
* @Description:Bean配置
* @Modified By:wangfan
* @Version: V1.0
*/
@Configuration
public class MyBeanConfig {
/**
* 因为RestTemplate不需要维护状态或属性等信息, 所以可以做成单例让Spring管理.
* @return
*/
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
2. 使用
2.1发起GET
使用getForObject
//1. 发起GET请求, 并把结果序列化为responseType类型并返回
public <T> T getForObject(URI url, Class<T> responseType)
//示例
String result = template.getForObject("http://localhost:9000/search/user?name=wangfan&age=28", String.class);
//2. 发起GET请求, 并把结果序列化为responseType类型并返回
//uriVariable是url参数
public <T> T getForObject(String url, Class<T> responseType, Object... uriVariables);
//示例
String result = template.getForObject("http://localhost:9000/search/user?name={1}&age={2}", String.class,"wangfan",28);
//3. 发起GET请求, 并把结果序列化为responseType类型并返回
//uriVariables是url参数
public <T> T getForObject(String url, Class<T> responseType, Map<String, ?> uriVariables);
//示例
Map<String, Object> uriVariables = new HashMap<String, Object>();
uriVariables.put("name","wangfan");
uriVariables.put("age",28);
String result = template.getForObject("http://localhost:9000/search/user", String.class, uriVariables);
使用getForObject
//1. 发起GET请求, 并把结果序列包装为为ResponseEntity<T>类型并返回
public <T> ResponseEntity<T> getForEntity(URI url, Class<T> responseType);
//2. 发起GET请求, 并把结果序列包装为为ResponseEntity<T>类型并返回
//uriVariable是url参数
public <T> ResponseEntity<T> getForEntity(String url, Class<T> responseType, Object... uriVariables);
//3. 发起GET请求, 并把结果序列包装为为ResponseEntity<T>类型并返回
//uriVariables是url参数
public <T> ResponseEntity<T> getForEntity(String url, Class<T> responseType, Map<String, ?> uriVariables);
getForObject
和 getForEntity
的区别:
主要区别还是返回值不一样, getForObject
会直接返回结果. 而getForEntity
会返回ResponseEntity<T>
, ResponseEntity<T>
会把结果包装, 不但含有结果信息还有其他重要网络指标信息,
比如说: 状态码. 响应头等等..
2.2发起POST
同GET方法
//request请求体内容(可空)
public <T> T postForObject(URI url, @Nullable Object request, Class<T> responseType)
//request: 请求体内容(可空)
//uriVariables: URL上带的参数
public <T> T postForObject(String url, @Nullable Object request, Class<T> responseType, Object... uriVariables);
//request请求体内容(可空)
//uriVariables: URL上带的参数
public <T> T postForObject(String url, @Nullable Object request, Class<T> responseType, Map<String, ?> uriVariables);
//request请求体内容(可空)
//uriVariables: URL上带的参数
public <T> ResponseEntity<T> postForEntity(URI url, @Nullable Object request, Class<T> responseType);
//request请求体内容(可空)
//uriVariables: URL上带的参数
public <T> ResponseEntity<T> postForEntity(String url, @Nullable Object request, Class<T> responseType, Object... uriVariables);
//request请求体内容(可空)
//uriVariables: URL上带的参数
public <T> ResponseEntity<T> postForEntity(String url, @Nullable Object request, Class<T> responseType, Map<String, ?> uriVariables);