RestTemplate 相关使用

介绍

在项目中,当我们需要远程调用一个 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).
                        // 添加 cookie
                        header(HttpHeaders.COOKIE, "key1=value1").
                        // 添加 header
                        header("MyRequestHeader", "MyValue").
                        accept(MediaType.APPLICATION_JSON).
                        contentType(MediaType.APPLICATION_JSON).
                        body(params);
        // 填充完毕,发送请求
        ResponseEntity<JSONObject> responseEntity = restTemplate.exchange(requestEntity, JSONObject.class);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值