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");
        }
    }
  • 相关阅读:
    手撸机器学习算法
    手撸机器学习算法
    《Python深度学习》 Part 1
    使用Gimp制作Windows应用程序图标
    C# 检查硬盘分区是ssd还是hdd
    微信小程序授权登录以及用户信息相关接口调整导致授权框不弹出
    CNN-LSTM
    MIL基本语法
    Akka Platform Guide 关键点梳理
    阿里云windows服务器激活
  • 原文地址:https://www.cnblogs.com/stono/p/13884625.html
Copyright © 2011-2022 走看看