利用 restTemplate发送application/json的请求,By一个后端发送http请求的神器

        前段时间的工作中,遇到了一些场景,需要后端来发送http请求去第三方接口获取信息,以前没有使用springboot,很多时候用Apache的HttpClientUtil来解决这类需求,但是后面逐渐改成okHttpClient,这个也是一个不错的开源框架,当然spring也提供了相应的请求工具,restTemplate也能够解决我们的需求,而且有spring的支持就不需要去整合第三方框架,也是一个不错的选择,下面的代码来写一下restTemplate的具体用法。

        我们现在有这么一个接口 http://wanfeng.store/api/getUser ,请求头需要设置为application/json

请求参数:

{
	"id":1
}

响应参数:
{
    "code": 200,
    "message": "success",
    "entity": {
        "id": 1,
        "userName": "zhangsan",
        "age": "100"
    }
}

  我们根据上面一个信息便可以制作一个后端接口去访问上面的接口

 

    @PostMapping("/getRestUsers")
    public RestResult getRestUsers() {
        RestTemplate restTemplate = new RestTemplate();
        //请求头
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_JSON);
        //请求体
        Map requestParam = new HashMap<>();
        requestParam.put("id", 1);
        //封装成一个请求对象
        HttpEntity entity = new HttpEntity(requestParam, headers);
        RestResult userResponseEntity = restTemplate.postForObject("http://localhost:8080/api/getUser", entity, RestResult.class);

        if (userResponseEntity.getCode() == 200) {
            return new RestResult(200, "success", userResponseEntity.getEntity());
        }
        return new RestResult(200, "success", null);
    }

    这里需要mark一些地方:

      1.是postForObject方法,使用这个方法需要一个前提,那就是知道对方的返回数据格式,并把它封装成一个对象即可,之前的接口,第三方会用一个restResult进行封装,所以我们这边也要配合,或者直接用postEntity,返回一个字符串,然后在用Jackson或gson对json字符串进行重新解读,封装成Map对象。

      2.响应用的model类需要实现一个空的构造方法,提供给restTemplate动态生成相对应的对象,restTemplate之后会通过set方法将属性注入到响应对象中。  

      3.我们客户端发起请求时,一个Map就可以了,没有必要再用json工具转成字符串发送给服务端,直接设置进入请求体即可。

    postForEntity代码如下:

        ResponseEntity userResponseEntity = restTemplate.postForEntity("http://localhost:8080/api/getUser", entity, String.class);
        HttpStatus statusCode = userResponseEntity.getStatusCode();
        if (statusCode == HttpStatus.OK) {
            String body = userResponseEntity.getBody();
            return new RestResult(200, "success", body);
        }

  上面是比较基本的post用法,有机会在写一些get的用法吧

你可能感兴趣的:(spring,java,http)