• RestTemplate使用方法


    创建两个SpringBoot项目,A项目端口号8080;B项目端口号8081。

    一、创建配置文件

    在A项目当中创建配置文件

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.client.RestTemplate;
    
    @Configuration   //声明这是个配置文件,使其能够被扫描到
    public class ApplicationContextConfig {
     
        @Bean
        public RestTemplate getRestTemplate() {
            return new RestTemplate();
        }
     
    }
    

    二、简单GET请求

    1、在B项目当中编写一个contoller

    	@GetMapping("/testList.do")
        public List<String> testList()
        {
            List<String> list = new ArrayList<>();
            for (int i = 0; i < 5; i++) {
                list.add("测试" + i);
            }
            return list;
        }
    

    2、在A项目当中编写一个controller

     	@Resource
        private RestTemplate restTemplate;
    
        @GetMapping("/test")
        public void test()
        {
            // 查询数据 get请求
            Object forObject = restTemplate.getForObject("http://localhost:8081/testList.do", Object.class);
            System.out.println(forObject);
        }
    

    3、调用A项目的接口

    http://localhost:8080/test

    4、输出结果

    在这里插入图片描述

    三、带参数的GET请求

    操作跟上面的一样,适当修改一样内容。

    1、在B项目当中编写一个contoller

    	@GetMapping("/testList.do")
        public List<String> testList(@RequestParam Integer page, @RequestParam Integer pageCount)
        {
            List<String> list = new ArrayList<>();
            String str = "A工程传过来的page参数值为:"+ page +", pageCount参数值为:" + pageCount;
            list.add(str);
            return list;
        }
    

    2、在A项目当中编写一个controller

    	@Resource
        private RestTemplate restTemplate;
    
        @GetMapping("/test")
        public void test()
        {
            // 查询数据 get请求
            Object forObject = restTemplate.getForObject("http://localhost:8081/testList.do?page=1&pageCount=2", Object.class);
            System.out.println(forObject.toString());
        }
    

    3、还是调用A项目的接口

    http://localhost:8080/test

    4、输出结果

    在这里插入图片描述

    四、POST请求

    1、在B项目当中编写一个contoller

    	@PostMapping("/testAdd.do")
        public Employee testAdd(@RequestBody Employee employee)
        {
            employee.setEmployeeNo("001");
            return employee;
        }
    

    2、在A项目当中编写一个controller

    	@Resource
        private RestTemplate restTemplate;
    
        @GetMapping("/test")
        public void test()
        {
            Employee employee = new Employee();
            employee.setEmployeeName("张三");
            Object forObject = restTemplate.postForObject("http://localhost:8081/testAdd.do", employee, Object.class);
            System.out.println(forObject);
        }
    

    3、还是调用A项目的接口

    http://localhost:8080/test

    4、输出结果

    可以看见在B项目当中set的employeeNo已经返回了。
    在这里插入图片描述

    2022.12.2补充

    五、带请求头的GET请求

    这里请求头headers我带上了两个内容 cookie 和 token

    @GetMapping("/testAdd.do")
        @ApiOperation(value = "测试")
        public void testAdd()
        {
            HttpHeaders headers = new HttpHeaders();
            headers.add("Cookie","JSESSIONID=D089C06ED1DA6549C4B16C52C68D7792; XSRF-TOKEN=415eee64-e793-4566-91fd-67866feda7d5; lang=zh-cn; windowOnline=true; authPicKey=5b25175c34c34131bcdf3e04c0c721a7; token=eyJhbGciOiJIUzI1NiJ9.eyJsb2dpblRpbWVzdGFtcCI6MTY2OTk2NjMzNjEwMiwidXNlcklkIjoiMTIzNDU2Nzg5MCJ9.kjzpenAh1y7INnT7oTHNZd65EE5N-TDP_SkyAZEhPwI; refreshToken=eyJhbGciOiJIUzI1NiJ9.eyJsb2dpblRpbWVzdGFtcCI6MTY2OTk2NjMzNjMwNn0.UazhU4j8-ZYcy7eqMvYM4N1Ztq2QVkMk6zg-1kjGEJY; username=admin");
            headers.add("X-XSRF-TOKEN","415eee64-e793-4566-91fd-67866feda7d5");
            HttpEntity httpEntity = new HttpEntity(headers);
    
            ResponseEntity<JSONObject> exchange = restTemplate.exchange("http://10.15.111.15:12201/sdata/rest/custody/judgeAdmin", HttpMethod.GET, httpEntity, JSONObject.class);
            JSONObject body = exchange.getBody();
            log.info("JSONObject远程调用数据信息:{}", body.toJSONString());
    
            ResponseEntity<String> exchange1 = restTemplate.exchange("http://10.15.111.15:12201/sdata/rest/custody/judgeAdmin", HttpMethod.GET, httpEntity, String.class);
            String body1 = exchange1.getBody();
            log.info("String远程调用数据信息:{}", body1);
    
        }
    

    输出内容
    在这里插入图片描述

    六、带请求头的POST请求

    请求头同get请求一样。

      @PostMapping("/testAdd.do")
        @ApiOperation(value = "测试")
        public void testAdd(@RequestBody UrlVO vo)
        {
            HttpHeaders headers = new HttpHeaders();
            headers.add("Cookie","JSESSIONID=D089C06ED1DA6549C4B16C52C68D7792; XSRF-TOKEN=415eee64-e793-4566-91fd-67866feda7d5; lang=zh-cn; windowOnline=true; authPicKey=5b25175c34c34131bcdf3e04c0c721a7; token=eyJhbGciOiJIUzI1NiJ9.eyJsb2dpblRpbWVzdGFtcCI6MTY2OTk2NjMzNjEwMiwidXNlcklkIjoiMTIzNDU2Nzg5MCJ9.kjzpenAh1y7INnT7oTHNZd65EE5N-TDP_SkyAZEhPwI; refreshToken=eyJhbGciOiJIUzI1NiJ9.eyJsb2dpblRpbWVzdGFtcCI6MTY2OTk2NjMzNjMwNn0.UazhU4j8-ZYcy7eqMvYM4N1Ztq2QVkMk6zg-1kjGEJY; username=admin");
            headers.add("X-XSRF-TOKEN","415eee64-e793-4566-91fd-67866feda7d5");
    
            HttpEntity httpEntity = new HttpEntity(vo,headers);
            JSONObject body = restTemplate.postForObject("http://10.15.111.15:12201/sdata/rest/ext/fullsync", httpEntity, JSONObject.class);
            log.info("POST====JSONObject远程调用数据信息:{}", body.toJSONString());
        }
    

    输出结果
    在这里插入图片描述

    七、表单形式的POST请求

    application/x-www-form-urlencoded

       @PostMapping("/form.do")
        @ApiOperation(value = "rest表单形式提交")
        public void form()
        {
            MultiValueMap body = new LinkedMultiValueMap();
            body.add("msgtitle", "这是测试消息标题");
            body.add("msgContent", "这是测试消息内容");
            body.add("summary", "这是测试摘要");
            body.add("sendChannel", "Mail、WeChat");
            ResponseEntity<JSONObject> exchange = restTemplate.postForEntity("http://10.15.111.15:12201/message/sendMessageApi", body, JSONObject.class);
            JSONObject result = exchange.getBody();
            log.info("[FillingService] 发送消息返回值:{}", result);
        }
    

    输出结果
    在这里插入图片描述

  • 相关阅读:
    Ubuntu 20.04 设置开机自启脚本
    多项目开发入门-业务场景关联基础入门测试 工资表
    技术干货|AI框架动静态图统一的思考
    css div左右布局
    IDEA全局搜索快捷键(ctrl+shift+F)失效修复
    数据科学的定义、简史和主要工作流程
    tcp的1对多模型C++处理逻辑
    深度剖析集成学习Xgboost
    【vulhub】PostGresql高权限命令执行漏洞复现(CVE-2019-9193)
    leetcode刷题日志-151反转字符串中的单词
  • 原文地址:https://blog.csdn.net/qq_41915325/article/details/127084643