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);
}
输出结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)