zoukankan      html  css  js  c++  java
  • Spring RestTemplate用法

    RestTemplate简介

    RestTemplate对HTTP请求进行了封装,进行请求的时候可以保留cookie,在下次请求的时候使用;

    postForEntity与postForObject功能类似,可以从源码上面看出postForEntity进行了为空判断;

    如果想在GET请求的时候带上cookie,不能使用getForEntity方法,需要使用exchange方法;

    注意GET请求参数添加有两种方法:直接添加到URL或者构建MultiValueMap对象;

    代码示例

    import org.springframework.http.*;
    import org.springframework.util.LinkedMultiValueMap;
    import org.springframework.util.MultiValueMap;
    import org.springframework.web.client.RestTemplate;
    
    import java.util.List;
    
    
    public class RestRequest {
        public static void main(String[] args) {
            List<String> cookies = login();
    
            postForValue(cookies);
    
            jsonPost(cookies);
    
            getForValue(cookies);
    
            getForValueV2(cookies);
        }
    
        // 有些服务器参数需要带在url上面
        private static void getForValueV2(List<String> cookies) {
            RestTemplate restTemplate = new RestTemplate();
            String url = "http://ip:port/xxx?key=value";
            HttpHeaders httpHeaders = new HttpHeaders();
            httpHeaders.put(HttpHeaders.COOKIE, cookies);
            HttpEntity<MultiValueMap<String, String>> httpEntity = new HttpEntity<>(null, httpHeaders);
            ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.GET, httpEntity, String.class);
            String body = responseEntity.getBody();
            System.out.println(body);
        }
    
        // 带cookie的Get请求;
        private static void getForValue(List<String> cookies) {
            RestTemplate restTemplate = new RestTemplate();
            String url = "http://ip:port/xxx";
            MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
            params.add("key", "value");
            HttpHeaders httpHeaders = new HttpHeaders();
            httpHeaders.put(HttpHeaders.COOKIE, cookies);
            HttpEntity<MultiValueMap<String, String>> httpEntity = new HttpEntity<>(params, httpHeaders);
            ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.GET, httpEntity, String.class);
            String body = responseEntity.getBody();
            System.out.println(body);
        }
    
        // json提交请求,带登陆cookie
        private static void jsonPost(List<String> cookies) {
            RestTemplate restTemplate = new RestTemplate();
            String url = "http://ip:port/xxx";
            String jsonString = "{}"; // json字符串,可以嵌套多级
            HttpHeaders httpHeaders = new HttpHeaders();
            httpHeaders.put(HttpHeaders.COOKIE, cookies);
            MediaType mediaType = MediaType.parseMediaType("application/json;charset=UTF-8");
            httpHeaders.setContentType(mediaType);
            httpHeaders.add("Accept", MediaType.APPLICATION_JSON.toString());
            HttpEntity<String> httpEntity = new HttpEntity<>(jsonString, httpHeaders);
            ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, httpEntity, String.class);
            String body = responseEntity.getBody();
            System.out.println(body);
        }
    
        // post提交请求,带登陆cookie
        private static void postForValue(List<String> cookies) {
            RestTemplate restTemplate = new RestTemplate();
            String url = "http://ip:port/xxx";
            MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
            params.add("key", "value");
            HttpHeaders httpHeaders = new HttpHeaders();
            httpHeaders.put(HttpHeaders.COOKIE, cookies);
            HttpEntity<MultiValueMap<String, String>> httpEntity = new HttpEntity<>(params, httpHeaders);
            ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, httpEntity, String.class);
            String body = responseEntity.getBody();
            System.out.println(body);
        }
    
        // 登陆请求,请求之后把cookie保留下来
        private static List<String> login() {
            RestTemplate restTemplate = new RestTemplate();
            String url = "http://ip:port/xxx";
            MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
            params.add("key", "value");
            HttpHeaders httpHeaders = new HttpHeaders();
            HttpEntity<MultiValueMap<String, String>> httpEntity = new HttpEntity<>(params, httpHeaders);
            ResponseEntity<String> responseEntity = restTemplate.postForEntity(url, httpEntity, String.class);
            HttpHeaders headers = responseEntity.getHeaders();
            return headers.get("Set-Cookie");
        }
    }
  • 相关阅读:
    根据输入参数,判定时间范围CheckTimeSpan
    C#登出系统并清除Cookie
    MySQL中使用group_concat遇到的坑
    MySQL中group by 与 order by 一起使用排序问题
    使用VMware安装CentOS 7
    VMware安装Linux提示此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态
    Yii2处理密码加密及验证
    Yii2 的安装及简单使用
    git merge的使用
    PHP中上传文件打印错误,错误类型
  • 原文地址:https://www.cnblogs.com/stono/p/13884625.html
Copyright © 2011-2022 走看看