汽车低价网站建设百度一下你就知道主页
RestTemplate
- 介绍
- 简单接口调用(getForObject)
- 添加 Header 和 Cookie(exchange)
介绍
在项目中,当我们需要远程调用一个 HTTP 接口时,我们经常会用到 RestTemplate 这个类。这个类是 Spring 框架提供的一个工具类,异常好用,其他框架中提供的 rest 调用或多或少借鉴了这个思路
该类提供三组接口
- getForObject — 这类方法是常规的 Rest API(GET、POST、DELETE 等)方法调用
- exchange:接收一个 RequestEntity 参数,可以自己设置 HTTP method,URL,headers 和 body,返回 ResponseEntity
- execute:通过 callback 接口,可以对请求和返回做更加全面的自定义控制
该工具关注请求数据的构建,以及返回数据的处理
简单接口调用(getForObject)
我们只需要一行代码即可实现 get 与 post 的请求
// get 请求的构建String result = restTemplate.getForObject("https://example.com/hotels/{hotel}/rooms/{hotel}", String.class, "hotel1", "hotel1");String url = "http://127.0.0.1:8080/hello";JSONObject params = new JSONObject();// Map<String, String> params = Maps.newHashMap();// restTemplate 会根据 params 的具体类型,调用合适的 HttpMessageConvert 将请求参数写到请求体 body 中,并在请求头中添加合适的 content-type;// 也会根据 responseType 的类型(本列子中是 JSONObject),设置 head 中的 accept 字段,当响应返回的时候再调用合适的 HttpMessageConvert 进行响应转换ResponseEntity<JSONObject> responseEntity = restTemplate.postForEntity(url, params, JSONObject.class);
获取返回的数据
// 可以通过 responseEntity 提供的各种方法来获取返回的各种信息Integer statusCodeValue = responseEntity.getStatusCodeValue();HttpHeaders headers = responseEntity.getHeaders();JSONObject body = responseEntity.getBody();
添加 Header 和 Cookie(exchange)
有时候,我们需要在请求中的 Head 中添加值或者将某些值通过 cookie 传给服务端
// 建立目标地址UriComponents uriComponents = UriComponentsBuilder.fromHttpUrl("127.0.0.1:8080").path("/test").build(true);URI uri = uriComponents.toUri();// 建立请求RequestEntity<JSONObject> requestEntity = RequestEntity.post(uri).// 添加 cookieheader(HttpHeaders.COOKIE, "key1=value1").// 添加 headerheader("MyRequestHeader", "MyValue").accept(MediaType.APPLICATION_JSON).contentType(MediaType.APPLICATION_JSON).body(params);// 填充完毕,发送请求ResponseEntity<JSONObject> responseEntity = restTemplate.exchange(requestEntity, JSONObject.class);