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);
    }

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

posted @ 2022-09-28 11:05  云村的王子  阅读(42)  评论(0编辑  收藏  举报  来源