当前位置:   article > 正文

RestTemplate使用笔记_postforobject传多个参数

postforobject传多个参数

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;

    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

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;

    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

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;

    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63

二、使用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;

    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

输出内容如下:
在这里插入图片描述
三、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;

   }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/302985
推荐阅读
相关标签
  

闽ICP备14008679号