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");
        }
    }
  • 相关阅读:
    Jmeter如何保持cookie,让所有请求都能用同一个cookie,免去提取JSESSIONID
    Jmeter如何提取响应头部的JSESSIONID
    Loadrunner如何进行有效的IP欺骗
    Center 6.5 redis 3.0安装
    小程序 wx.getRecorderManager 录音 to 语音识别
    微信小程序语音识别服务搭建全过程解析(https api开放,支持新接口mp3录音、老接口silk录音)
    java自然语言理解demo,源码分享(基于欧拉蜜)
    微信小程序——智能小秘“遥知之”源码分享(语义理解基于olami)
    bash, sh, dash 傻傻分不清楚
    微信小程序语音识别服务搭建全过程解析(项目开源在github)
  • 原文地址:https://www.cnblogs.com/stono/p/13884625.html
Copyright © 2011-2022 走看看