写点什么

Java 中 restTemplate 的使用

作者:代码的路
  • 2023-01-13
    江苏
  • 本文字数:2901 字

    阅读完需:约 10 分钟

原文链接


GitHub项目地址


Gitee项目地址


本文介绍 restTemplate 基础用法。


Java 中 get 和 post 的用法请参考:https://mp.weixin.qq.com/s/mC0D1nuCqIori5bWtLorWQ

1 提供 get/post 接口

1.1 Controller

@RestController@RequestMapping("/homepage")public class MyController {
@Autowired MyService myService;
// 提供get接口 @GetMapping("/provideGet") public Map<String, String> provideGet(){ return myService.provideGet(); }
// 提供post接口 @PostMapping("/providePost") public Map<String, Object> providePost(@RequestParam("number") int number, @RequestParam("name") String name) { return myService.providePost(number, name); }
// 提供map参数的post接口 @PostMapping("/providePostByMap") public Map<String, Object> providePostByMap(@RequestParam Map<String, Object> map) { return myService.providePostByMap(map); }
// 调用get接口 @GetMapping("/useGet") public Map<String, Object> useGet() { return myService.useGet(); }}
复制代码

1.2 Service

@Service@EnableSchedulingpublic class MyService {
public Map<String, String> provideGet() { Map<String, String> res = new HashMap<>(); res.put("number", "3"); res.put("name", "张三get"); System.out.println("provideGet res:" + res + "\n"); return res; }
public Map<String, Object> providePost(int number, String name) { Map<String, Object> res = new HashMap<>(); res.put("number", number); res.put("name", name);
return res; }
public Map<String, Object> providePostByMap(Map<String, Object> map) { int number = map.get("number") == null ? 0 : Integer.parseInt((String) map.get("number")); String name = map.get("name") == null ? "" : (String) map.get("name"); Map<String, Object> res = new HashMap<>(); res.put("number", number); res.put("name", name);
System.out.println("providePostByMap res:" + res + "\n"); return res; }}
复制代码

2 调用 get/post 接口

使用 restTemplate 调用 get/post 接口。


  • getForObject():返回值是HTTP协议的响应体

  • getForEntity():返回的是ResponseEntityResponseEntity是对HTTP响应的封装,除了包含响应体,还包含HTTP状态码、contentType、contentLength、Header等信息

2.1 Controller

@RestController@RequestMapping("/homepage")public class MyController {      @Autowired    MyService myService;
// 调用get接口 @GetMapping("/useGet") public Map<String, Object> useGet() { return myService.useGet(); }
// 调用get接口验证账号密码 @GetMapping("/useGetByPsw") public Map<String, Object> useGetByPsw() { return myService.useGetByPsw(); }
// 调用post接口 @PostMapping("/usePost") public Map<String, Object> usePost() { return myService.usePost(); }}
复制代码

2.2 Service

@Service@EnableSchedulingpublic class MyService {    @Resource    private RestTemplate restTemplate;
String getURL = "http://localhost:8081/homepage/provideGet"; String postURL = "http://localhost:8081/homepage/providePostByMap";
public Map<String, Object> useGet() { // getForObject返回值是HTTP协议的响应体 String strObject = restTemplate.getForObject(getURL, String.class); JSONObject jsonObject = JSONObject.parseObject(strObject);
// getForEntity返回的是ResponseEntity,是对HTTP响应的封装 ResponseEntity<ResponseResult> responseData = restTemplate.getForEntity(getURL, ResponseResult.class); Map<String, Object> returnData = new HashMap<>(); returnData.put("StatusCode:", responseData.getStatusCode()); returnData.put("Body:", responseData.getBody());
System.out.println("useGet jsonObject:" + jsonObject + "\n"); System.out.println("useGet responseData:" + responseData + "\n"); System.out.println("useGet returnData:" + returnData + "\n"); return returnData; }
public Map<String, Object> useGetByPsw() {
RestTemplateBuilder builder = new RestTemplateBuilder(); RestTemplate restTemplate = builder.basicAuthentication("username", "password").build();
// getForEntity返回的是ResponseEntity,是对HTTP响应的封装 ResponseEntity<ResponseResult> responseData = restTemplate.getForEntity(getURL, ResponseResult.class); Map<String, Object> returnData = new HashMap<>(); returnData.put("StatusCode:", responseData.getStatusCode()); returnData.put("Body:", responseData.getBody());
System.out.println("useGetByPsw returnData:" + responseData + "\n"); System.out.println("useGetByPsw returnData:" + returnData + "\n"); return returnData; }
public Map<String, Object> usePost() { //RestTemplate在postForObject时,用MultiValueMap,不可使用HashMap。 MultiValueMap<String, String> sendData = new LinkedMultiValueMap<>(); sendData.add("number", "3"); sendData.add("name", "张三post");
// getForObject返回值是HTTP协议的响应体 String strObject = restTemplate.postForObject(postURL, sendData, String.class); JSONObject jsonObject = JSONObject.parseObject(strObject);
// getForEntity返回的是ResponseEntity,是对HTTP响应的封装 ResponseEntity<ResponseResult> responseData = restTemplate.postForEntity(postURL, sendData, ResponseResult.class); Map<String, Object> returnData = new HashMap<>(); returnData.put("StatusCode:", responseData.getStatusCode()); returnData.put("Body:", responseData.getBody());
System.out.println("usePost jsonObject:" + jsonObject + "\n"); System.out.println("usePost responseData:" + responseData + "\n"); System.out.println("usePost returnData:" + returnData + "\n"); return returnData; }}
复制代码


学习更多编程知识,请关注我的公众号:


代码的路



发布于: 刚刚阅读数: 4
用户头像

代码的路

关注

公众号:代码的路 2023-01-10 加入

Java、Python、C++、图像处理、深度学习相关知识分享

评论

发布
暂无评论
Java中restTemplate的使用_Java_代码的路_InfoQ写作社区