• 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");
        }
    }
  • 相关阅读:
    DIY树莓派之随身工具箱
    经验分享 | Burpsuite抓取非HTTP流量
    版本控制工具:SVN和Maven的区别
    Dicom Conformance
    从Script到Code Blocks、Code Behind到MVC、MVP、MVVM
    MVC,MVP 和 MVVM 的图示
    DB2 触发器的写法及表主键结构的修改
    数据表增加列的时候赋默认值
    Mysql数据库乱码总结
    又在字符集上浪费时间
  • 原文地址:https://www.cnblogs.com/stono/p/13884625.html
Copyright © 2020-2023  润新知