RestTemplate使用

小咪咪 2023-09-27 04:59 161阅读 0赞

RestTemplate使用

  • 一、RestTemplate 概述
  • 二、使用步骤
    • 2.1 添加依赖
    • 2.2 添加配置类
    • 2.3 使用案例
    • 2.4 测试
    • 本文只是简单记录一下,无过多深入拓展
    • 三 实际项目中使用
      • 3.1 入参单参数
        • 接口文档
        • java代码发送请求

一、RestTemplate 概述

在实际开发中需要调用第三方接口数据,或者是调用另外一个服务接口时,我们可以使用spring 框架提供的 RestTemplate 类可用于在应用中调用 rest 服务,它简化了与 http 服务的通信方式,统一了 restful 的标准,封装了 http 链接, 我们只需要传入 url 及返回值类型即可。

项目中源码

二、使用步骤

2.1 添加依赖

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-web</artifactId>
  4. <version>2.2.9.RELEASE</version>
  5. </dependency>

2.2 添加配置类

将RestTemplate 交给spring容器管理,方便直接使用

  1. import org.springframework.context.annotation.Bean;
  2. import org.springframework.context.annotation.Configuration;
  3. import org.springframework.web.client.RestTemplate;
  4. @Configuration
  5. public class RestTemplateConfig {
  6. @Bean
  7. public RestTemplate restTemplate() {
  8. return new RestTemplate();
  9. }
  10. }

2.3 使用案例

  1. @RestController
  2. @RequestMapping("/consumer/depart")
  3. public class DepartController {
  4. @Autowired
  5. private RestTemplate restTemplate;
  6. private static final String SERVICE_PROVIDER = "http://localhost:8081";
  7. @PostMapping("/save")
  8. public boolean saveHandle(@RequestBody DepartVO depart) {
  9. String url = SERVICE_PROVIDER + "/provider/depart/save";
  10. return restTemplate.postForObject(url, depart, Boolean.class);
  11. }
  12. @DeleteMapping("/del/{id}")
  13. public void deleteHandle(@PathVariable("id") int id) {
  14. String url = SERVICE_PROVIDER + "/provider/depart/del/" + id;
  15. restTemplate.delete(url);
  16. }
  17. @PutMapping("/update")
  18. public void updateHandle(@RequestBody DepartVO depart) {
  19. String url = SERVICE_PROVIDER + "/provider/depart/update";
  20. restTemplate.put(url, depart, Boolean.class);
  21. }
  22. @GetMapping("/get/{id}")
  23. public DepartVO getHandle(@PathVariable("id") int id) {
  24. String url = SERVICE_PROVIDER + "/provider/depart/get/" + id;
  25. return restTemplate.getForObject(url, DepartVO.class);
  26. }
  27. @GetMapping("/list")
  28. public List<DepartVO> listHandle() {
  29. String url = SERVICE_PROVIDER + "/provider/depart/list/";
  30. return restTemplate.getForObject(url, List.class);
  31. }
  32. }

2.4 测试

消费者调用http服务接口
在这里插入图片描述
服务端接收到请求
在这里插入图片描述

本文只是简单记录一下,无过多深入拓展

一文吃透接口调用神器RestTemplate
RestTemplate全网最强总结(永久更新)

三 实际项目中使用

3.1 入参单参数

普通表单默认为 application/x-www-form-urlencoded 类型的请求。

接口文档

入参要求:
请求类型: POST
参数名:parm
参数值为json字符串,内部参数如下

  1. {
  2. "requestBody": {
  3. "condition": {
  4. "currentPageNo": "1",
  5. "pageSize": "1000"
  6. }
  7. }
  8. }

在这里插入图片描述

java代码发送请求

  1. private List<SysUnitRelation> queryUnitRelation() throws JsonProcessingException {
  2. List<SysUnitRelation> datalist = new ArrayList<>();
  3. Map<String, Object> param = new HashMap<>(2);
  4. Map<String, Object> requestBody = new HashMap<>(2);
  5. Map<String, Object> condition = new HashMap<>(4);
  6. condition.put("currentPageNo", 1);
  7. condition.put("pageSize", 1000);
  8. requestBody.put("condition", condition);
  9. param.put("requestBody", requestBody);
  10. String body = objectMapper.writeValueAsString(param);
  11. //①:表单信息,需要放在MultiValueMap中,MultiValueMap相当于Map<String,List<String>>
  12. MultiValueMap<String, String> postParameters = new LinkedMultiValueMap<>();
  13. //调用add方法填充表单数据(表单名称:值)
  14. postParameters.add("parm", body);
  15. HttpHeaders headers = new HttpHeaders();
  16. headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
  17. HttpEntity<MultiValueMap<String, String>> httpEntity = new HttpEntity<>(postParameters, headers);
  18. QxbResponse unitRelationResult = restTemplate.postForObject(unitRelationUrl, httpEntity, QxbResponse.class);
  19. log.info("查询中台经营组织、业务单元、产出线映射关系:" + unitRelationUrl + "结束\n返回结果:" + unitRelationResult);
  20. String jsonResult = objectMapper.writeValueAsString(unitRelationResult.getContent());
  21. if (unitRelationResult.isResult() && ObjectUtils.isNotEmpty(unitRelationResult.getContent())) {
  22. datalist = objectMapper.readValue(jsonResult, new TypeReference<List<SysUnitRelation>>() {
  23. });
  24. }
  25. return datalist;
  26. }

发表评论

表情:
评论列表 (有 0 条评论,161人围观)

还没有评论,来说两句吧...

相关阅读

    相关 restTemplate使用

    目录 目录 一、概述? 二、使用步骤 1.引入依赖 2.创建RestTemplate对象,交由spring容器进行管理 3.使用方法 3.1 GET请求