赞
踩
Springboot提供的RestTemplate可以进行微服务之间的接口调用,在实际的开发中用到的比较多,这里做一个简单的总结
一、使用postForObject()方法传参
1、当服务消费者传参为实体类对象时,
//服务消费者方法 @ResponseBody @RequestMapping("/entity") public Object testRestTemplate() { Student student = new Student(); student.setId("001"); student.setName("jack"); student.setAge(20); String url = "http://127.0.0.1:8091/orderService/service/entity"; //使用postForObject(String url,Object request,Class<T> responseType) String result = restTemplate.postForObject(url,student,String.class); System.out.println("返回数据:" + result); return result; } //服务提供者方法(接口) /** * 当RestTemplate传递实体类Entity为参数时, * 使用@RequestBody()Entity entity进行接收; * 也可以使用@RequestBody() Map<String,Object> map 进行接收 * 使用@RequestBody()JSONObject jsonObj进行接收 * * HttpServletRequest接收为null * 使用 String id,String name.....接收也为null * @param student * @return */ @ResponseBody @RequestMapping("/entity") public String testRestTemplate(@RequestBody(required = false) Student student) { System.out.println("对象 接收请求参数:"+student); student.setName("tom"); return "实体类对象"+student; }
2、当服务消费者传参为JSON对象时
//服务消费者方法 @ResponseBody @RequestMapping("/jsonEntity") public String testRestTemplate02() { JSONObject jsonObj = new JSONObject(); jsonObj.put("id", "001"); jsonObj.put("name", "jack"); jsonObj.put("age", 20); String url = "http://127.0.0.1:8091/orderService/service/jsonEntity"; String result = restTemplate.postForObject(url, jsonObj, String.class); System.out.println("返回数据:" + result); return result; } //服务提供者方法(接口) /** * 当RestTemplate传递JSON对象为参数, * 使用@RequestBody() Entity entity可以进行接收 * 使用@RequestBody() Map<String,Object> map可以进行接收 * 使用@RequestBody()JSONObject jsonObj进行接收 * * 使用HttpServletRequest接收值为null, * 使用String id,String name......接收值为Null * * @param request * @return */ @ResponseBody @RequestMapping("/jsonEntity") public String testRestTemplate02(@RequestBody(required = false)Student student) { System.out.println("json对象 接收请求参数:" + student) return "json对象"+student; }
3、当服务消费者传参为JSON字符串时
//服务消费者方法 @ResponseBody @RequestMapping("/jsonEntityStr") public String testRestTemplate03() { JSONObject jsonObj = new JSONObject(); jsonObj.put("id", "001"); jsonObj.put("name", "jack"); jsonObj.put("age", 20); //设置协议头 /* * org.springframework.http.HttpEntity; * org.springframework.http.HttpHeaders; * org.springframework.http.MediaType; */ HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); headers.setContentType(type); //将要发送的数据和协议头放到请求体对象中,作为参数传递 HttpEntity<String> httpEntity = new HttpEntity<String>(jsonObj.toString(), headers); String url = "http://127.0.0.1:8091/orderService/service/jsonEntityStr"; String result = restTemplate.postForObject(url, jsonObj.toString(), String.class); System.out.println("返回请求参数:" + result); return result; } //服务提供者方法(接口) /** * 当RestTemplate传递JSON字符串为参数, * 需要先进行发送协议头设置 * 1、可使用@RequestBody() Entity entity 接收 * 2、使用@RequestBody() JSONObject jsonObj 接收 * 3、使用@RequestBody() Map<> map 接收 * * 若使用HttpServletRequest接收,则接收值为Null *使用String id,String name.....接收值为Null * * @param student * @return */ @ResponseBody @RequestMapping("/jsonEntityStr") public String testRestTemplate03(@RequestBody(required = false)Map<String,Object> map) { String name = map.get("name").toString(); System.out.println("json对象字符串 接收请求参数:"+ name ); //Student student = new Student(); return "json对象字符串"+name; }
二、使用postForEntity()方法
postForEntity()方法和postForObject()方法的使用差不多,不同的地方在于返回值不一样,postForObject()返回的是我们设置的 Class responseType 的T类型对象
postForEntity()返回的是整个响应体对象
//服务消费者 @ResponseBody @RequestMapping("/postForEntity") public String getRestTemplate() { Student student = new Student(); student.setId("001"); student.setName("jack"); student.setAge(20); String url = "http://127.0.0.1:8091/orderService/service/entity"; ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, student, String.class); restTemplate.post System.out.println("返回信息:"+responseEntity); //返回信息:<200,实体类对象Student(id=001, name=tom, age=20), // [Content-Type:"text/plain; // charset=UTF-8", Content-Length:"48", Date:"Sun, 23 May 2021 07:00:57 GMT", Keep-Alive:"timeout=60", Connection:"keep-alive"]> return null; } //服务提供者 @ResponseBody @RequestMapping("/entity") public String testRestTemplate(@RequestBody(required = false) Student student) { System.out.println("对象 接收请求参数:"+student); student.setName("tom"); return "实体类对象"+student; }
输出内容如下:
三、getForObject()方法使用
//服务消费者方法 @ResponseBody @RequestMapping("/getForObject") public String getEntity() { String url = "http://127.0.0.1:8091/orderService/service/getForObject?id=001&&name=tom&&age=34"; String result = restTemplate.getForObject(url,String.class); System.out.println(result); return result; } //服务提供者方法(接口) /** 当传参方式为get方式时 * 使用HttpServletRequest request * 使用String id,String name..... * 使用@RequestBody() Map<> map * @param name * @return */ @ResponseBody @RequestMapping("/getForObject") public String testGetMethod(String id,String name){ return name; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。