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