RestTemplate 是从 Spring3.0 开始支持的一个 HTTP 请求工具,它提供了常见的REST请求方案的模版,例如 GET 请求、POST 请求、PUT 请求、DELETE 请求以及一些通用的请求执行方法 exchange 以及 execute。RestTemplate 继承自 InterceptingHttpAccessor 并且实现了 RestOperations 接口,其中 RestOperations 接口定义了基本的 RESTful 操作,这些操作在 RestTemplate 中都得到了实现。
使用
1.新建 config.ApplicationContextConfig.java
@Configuration public class ApplicationContextConfig { @Bean // applicationContext.xml <bean id="" class=""> public RestTemplate restTemplate() { return new RestTemplate(); } }
2.使用
@Resource private RestTemplate restTemplate; @GetMapping(value = "/consumer/payment/create") public CommonResult<Payment> create(Payment payment) { return restTemplate.postForObject(“http://localhost:8080” + "/payment/get/" + id, payment, CommonResult.class); // (url, requestMap, ResponseBean.class) 这三个参数分别代表 // REST请求地址、请求参数、HTTP响应被转换成的对象类型 // 支持的方法很多,不一一列举了 } @GetMapping(value = "/consumer/payment/getForEntity/{id}") public CommonResult getpaymentlist2(@PathVariable("id") Long id) { ResponseEntity<CommonResult> entity = restTemplate.getForEntity(PAYMENT_URL + "/payment/get/" + id, CommonResult.class); if (entity.getStatusCode().is2xxSuccessful()){ // log.info(entity.getHeaders()); return entity.getBody(); }else { return new CommonResult(444,"查询失败"); } }
3.添加请求头和body
import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; private static String formUpload(){ HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.set("token","123"); httpHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED); // 封装参数,千万不要替换为Map与HashMap,否则参数无法传递 MultiValueMap<String, Object> multiValueMap = new LinkedMultiValueMap<>(); multiValueMap.add("api_key", API_KEY); multiValueMap.add("api_secret", API_SECRET); HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(multiValueMap, httpHeaders); return restTemplate.postForObject(serverUrl, httpEntity, String.class); }