• Springboot与RestTemplate


            RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。

    一、使用Get进行访问

    1、获取json格式

            使用 getForEntity() API 发起 GET 请求

    1. RestTemplate restTemplate = new RestTemplate();
    2. String fooResourceUrl = "http://localhost:8080/spring-rest/foos";
    3. ResponseEntity response = restTemplate.getForEntity(fooResourceUrl + "/1", String.class);
    4. System.out.println(response.getStatusCode());

            可以访问完整的 HTTP 响应,因此可以检查 HTTP 状态码是否成功,或者处理响应体:

    1. ObjectMapper mapper = new ObjectMapper();
    2. JsonNode root = mapper.readTree(response.getBody());
    3. JsonNode name = root.path("name");
    4. System.out.println(name.asText());

            如上,将响应体作为标准字符串(String)返回,并使用 Jackson(以及 Jackson 提供的 JSON 节点结构)来验证一些细节。

    2、获取pojo格式

            可以将响应直接映射到资源 DTO:

    1. public class Foo implements Serializable {
    2. private long id;
    3. private String name;
    4. // 标准的 get 、set 方法
    5. }

            只需要调用 template 的 getForObject API 即可:

    1. Foo foo = restTemplate.getForObject(fooResourceUrl + "/1", Foo.class);
    2. Assertions.assertNotNull(foo.getName());
    3. Assertions.assertEquals(foo.getId(), 1L);

    二、使用Post进行访问

    1、传递表单参数

            可以使用 postForLocation()postForObject() 或 postForEntity() 方法 在 API 中创建新资源。前者(postForLocation)返回新创建资源的 URI,后者返回资源本身。

    1. // 创建请求头对象
    2. HttpHeaders headers = new HttpHeaders();
    3. // 设置请求内容类型 表单上传编码格式为application/x-www-form-urlencoded
    4. headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
    5. // 请求携带的参数与对应的值
    6. MultiValueMap map = new LinkedMultiValueMap<>();
    7. map.add("username", USER_NAME);
    8. map.add("password", PASSWORD);
    9. // HttpEntity表示http的request和resposne实体,它由消息头和消息体组成。
    10. // 从HttpEntity中可以获取http请求头和回应头,也可以获取http请求体和回应体信息。
    11. HttpEntity> request = new HttpEntity<>(map, headers);
    12. return restTemplate.postForObject(TOKEN_URL, request, ComplainWorkToken.class);

    2、传递json参数

    1. HttpHeaders headers = new HttpHeaders();
    2. // 设置请求头是json
    3. headers.add("Content-Type", MediaType.APPLICATION_JSON_UTF8_VALUE);
    4. // 携带的json参数格式
    5. Map map2 = new HashMap<>();
    6. map2.put("pageNo", pageNo);
    7. map2.put("pageSize", pageSize);
    8. map2.put("endTime", endTime);
    9. map2.put("startTime", startTime);
    10. HttpEntity> httpEntity = new HttpEntity<>(map2, headers);
    11. ComplainWorkResponse complainWorkResponse = restTemplate.postForObject(url, httpEntity, ComplainWorkResponse.class);
    12. assert complainWorkResponse != null;
    13. return complainWorkResponse.getComplainWorkData().getList();
  • 相关阅读:
    用python实现给女朋友自动发微信
    Python冷知识:如何找出新版本增加或删除了哪些标准库?
    Go实现udp服务
    C++前缀和算法:构造乘积矩阵
    R语言使用lightgbm包构建二分类的LightGBM模型、使用predict函数和训练模型进行预测推理,预测测试数据的概率值并转化为标签
    2068. 检查两个字符串是否几乎相等
    一觉醒来发现Github要废弃Trending Tab
    【LeetCode-简单题】1047. 删除字符串中的所有相邻重复项
    后端web开发框架——Spring Boot
    代理IP与Socks5代理:跨界电商之安全防护与智能数据引擎
  • 原文地址:https://blog.csdn.net/qq_40298351/article/details/139848944