RestTemplate的使用

前言

写这篇文章主要是为了spring cloud 中使用RestTemplate做get,post,put,delete使用。
spring cloud文章链接

RestTemplate GET的使用

返回json数据和返回实体对象代码

	/**
     *getForEntity调用提供者测试 返回值string json
     * @return
     */
    @RequestMapping(value="/cloud/getForEntity")
    public String getForEntity() {
        //get 字符串 接口http://01-springcloud-service-provider/s/hello
        /*ResponseEntity<String> responseEntity = restTemplate.getForEntity("http://01-springcloud-service-provider/s/hello", String.class);
        String body = responseEntity.getBody();
        HttpStatus statusCode = responseEntity.getStatusCode();
        int statusCodeValue = responseEntity.getStatusCodeValue();
        HttpHeaders headers = responseEntity.getHeaders();
        System.out.println(body);
        System.out.println(statusCode);
        System.out.println(statusCodeValue);
        System.out.println(headers);

        return restTemplate.getForEntity("http://01-springcloud-service-provider/s/hello", String.class).getBody();*/

        //获取 json字符串
        ResponseEntity<String> responseEntity = restTemplate.getForEntity("http://01-springcloud-service-provider/s/getForentityListJson", String.class);

        String jsonString = responseEntity.getBody();
        List<User> lists = JSONObject.parseArray(jsonString, User.class);

        HttpStatus statusCode = responseEntity.getStatusCode();
        int statusCodeValue = responseEntity.getStatusCodeValue();
        HttpHeaders headers = responseEntity.getHeaders();
        System.out.println(jsonString);
        System.out.println(statusCode);
        System.out.println(statusCodeValue);
        System.out.println(headers);

        return restTemplate.getForEntity("http://01-springcloud-service-provider/s/hello", String.class).getBody();
    }


    /**
     *getForEntity调用提供者测试 返回值string 参数map 或者数组
     * getForObject 相当于getForEntity的body。先不写了
     * @return
     */
    @RequestMapping(value="/cloud/getForEntityList")
    public User[] getForEntityList() {
        /*传参 方式1
        String [] array = {"1","张无敌"};
        //返回值使用list.class 不行,必须数组  参数
        ResponseEntity<User[]> restTemplateForEntity = restTemplate.getForEntity("http://01-springcloud-service-provider/s/getForentityList?id={0}&name={1}", User[].class,array);
        * 方式2 Map<String, Object> paramMap = new ConcurrentHashMap<>();
               paramMap.put("id", 1);
               paramMap.put("name", " 张无忌");
                restTemplate.getForEntity("http://01-SPRINGCLOUD-SERVICE-PROVIDER/service/hello?id={id}&name={name}", String.class, paramMap).getBody();
        * */
        Map<String, Object> paramMap = new HashMap<>();
        paramMap.put("id", 1);
        paramMap.put("name", " 张无忌");
        //返回值使用list.class 不行,必须数组  参数
        ResponseEntity<User[]> restTemplateForEntity = restTemplate.getForEntity("http://01-springcloud-service-provider/s/getForentityList?id={id}&name={name}", User[].class,paramMap);
        User[] body = restTemplateForEntity.getBody();

        List<Order> list = body[0].getList();
        for (Order order : list) {
            System.out.println(order.getId());
        }

        return restTemplate.getForEntity("http://01-springcloud-service-provider/s/getForentityList?id={id}&name={name}", User[].class,paramMap).getBody();

    }

因为getForObject 与getForEntity 使用类似,只不过 getForObject 是在getForEntity 基础上进行了再次封装,可以将 http 的响应体 body
信息转化成指定的对象,方便我们的代码开发;当你不需要返回响应中的其他信息,只需要 body 体信息的时候,可以使用这个更方便;

RestTemplate POST的使用

消费者:
	/**
     *post测试
     * @return
     */
    @RequestMapping(value="/cloud/post")
    public User post() {

       //post请求表单传参 注意 导包 import org.springframework.util.MultiValueMap;
        MultiValueMap<String,User> datamap =  new LinkedMultiValueMap<String,User>();
        List<Order> listO = new ArrayList<>();
        listO.add(new Order(1,"ls1"));
        listO.add(new Order(2,"ls2"));
        datamap.add("user",new User(1,"zss",listO));
        ResponseEntity<User> restTemplateForEntity  =  restTemplate.postForEntity("http://01-springcloud-service-provider/s/post",datamap,User.class);

        return restTemplate.postForEntity("http://01-springcloud-service-provider/s/post",datamap,User.class).getBody();
    }
    提供者接口:
		/**
     * 测试返回 post
     * @return
     */
    @RequestMapping(value = "/s/post",method = RequestMethod.POST)
    public User post(@RequestParam("user") String user){
        User user1 = JSON.parseObject(user, User.class);

        return user1;
    }

RestTemplate PUT的使用

与post基本一致,除了没有返回值,类似update。

RestTemplate DELETE的使用

和get一样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RestTemplate是Spring提供的一个用于访问RESTful Web服务的客户端工具类,它封装了HTTP请求和响应的细节,使得开发者可以方便地进行RESTful Web服务的调用。 使用RestTemplate需要进行以下步骤: 1. 创建RestTemplate实例 可以使用以下代码创建一个RestTemplate实例: ``` RestTemplate restTemplate = new RestTemplate(); ``` 2. 发送HTTP请求 可以使用RestTemplate的一些方法发送HTTP请求,例如: ``` // GET请求 String result = restTemplate.getForObject(url, String.class); // POST请求 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity<String> entity = new HttpEntity<>(requestBody, headers); String result = restTemplate.postForObject(url, entity, String.class); ``` 其中,`url`表示请求的URL,`String.class`表示请求返回的数据类型,`requestBody`表示POST请求中的请求体。 3. 处理HTTP响应 RestTemplate提供了一些方法用于处理HTTP响应,例如: ``` // GET请求 ResponseEntity<String> response = restTemplate.getForEntity(url, String.class); HttpStatus statusCode = response.getStatusCode(); String responseBody = response.getBody(); // POST请求 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity<String> entity = new HttpEntity<>(requestBody, headers); ResponseEntity<String> response = restTemplate.postForEntity(url, entity, String.class); HttpStatus statusCode = response.getStatusCode(); String responseBody = response.getBody(); ``` 其中,`ResponseEntity`表示HTTP响应的实体类,包含了响应头、响应状态码和响应体等信息,`statusCode`表示响应状态码,`responseBody`表示响应体。 以上就是使用RestTemplate的基本流程。在实际的开发中,可以根据实际需求选择不同的RestTemplate方法来发送HTTP请求和处理HTTP响应。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值