Spring RestTemplate用法 Post Get Cookie

Posted stono

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring RestTemplate用法 Post Get Cookie相关的知识,希望对你有一定的参考价值。

RestTemplate简介

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

postForEntity与postForObject功能类似,可以从源码上面看出异同;

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

代码示例

 

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);
    }

    // 带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");
    }
}

 

以上是关于Spring RestTemplate用法 Post Get Cookie的主要内容,如果未能解决你的问题,请参考以下文章

RestTemplate的使用

resttemplatebuilder 在哪个jar包

Spring FeignClient使用

Spring Cloud整合Sentinel

RestTemplate的用法总结

springboot学习总结RestTemplate用法