SpringBoot使用RestTemplate实现HTTP请求详解
作者:一线大码
这篇文章主要为大家详细介绍了SpringBoot如何使用RestTemplate实现进行HTTP请求,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
1. 简单使用
RestTemplate
底层是通过HttpURLConnection
实现的。
(1)getForObject
RestTemplate restTemplate = new RestTemplate(https://blog.csdn.net/mryang125/article/details/80955558); String url = "http://localhost:8080/user/{id}"; UserVo userVo = restTemplate.getForObject(url, UserVo.class, id);
第一个参数表示URL
,第二个参数表示返回类型,第三个参数表示URI
中对应的参数,是一个可变长参数,可按顺序写多个参数。
(2)getForEntity
RestTemplate restTemplate = new RestTemplate(); String url = "http://localhost:8080/users/{userName}/{note}/{start}/{limit}"; //使用map封装多个参数 Map<String, Object> params = new HashMap<>(); params.put("userName", userName); params.put("note", note); params.put("start", start); params.put("limit", limit); ResponseEntity<List> responseEntity = restTemplate.getForEntity(url, List.class, params); List<UserVo> userVos = responseEntity.getBody();
(3)postForObject
RestTemplate restTemplate = new RestTemplate(); String url = "http://localhost:8080/user"; //设置请求头 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON_UTF8); //创建请求实体对象 HttpEntity<UserVo> request = new HttpEntity<>(newUserVo, headers); User user = restTemplate.postForObject(url, request, User.class);
(4)postForEntity
RestTemplate restTemplate = new RestTemplate(); String url = "http://localhost:8080/user"; //设置请求头 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON_UTF8); //创建请求实体对象 HttpEntity<UserVo> request = new HttpEntity<>(newUserVo, headers); //请求服务器 ResponseEntity<User> responseEntity = restTemplate.postForEntity(url, request, User.class); //获取响应体 User user = responseEntity.getBody(); //获取响应头 HttpHeaders respHeaders = responseEntity.getHeaders(); //获取响应属性 List<String> success = respHeaders.get("success"); //获取响应状态码 int statusCode = responseEntity.getStatusCodeValue();
(5)delete
RestTemplate restTemplate = new RestTemplate(); restTemplate.delete("http://localhost:8080/use/{id}", id);
(6)exchange
RestTemplate
还提供了一个exchange
方法,该方法比上面的方法灵活,可以通过制定参数实现各种Http
请求。下面列出Spring
提供的八种方法。
<T> ResponseEntity<T> exchange(String url, HttpMethod method, HttpEntity<?> requestEntity, Class<T> responseType, Object... uriVariables) throws RestClientException; <T> ResponseEntity<T> exchange(String url, HttpMethod method, HttpEntity<?> requestEntity, Class<T> responseType, Map<String, ?> uriVariables) throws RestClientException; <T> ResponseEntity<T> exchange(URI url, HttpMethod method, HttpEntity<?> requestEntity, Class<T> responseType) throws RestClientException; <T> ResponseEntity<T> exchange(String url,HttpMethod method, HttpEntity<?> requestEntity, ParameterizedTypeReference<T> responseType, Object... uriVariables) throws RestClientException; <T> ResponseEntity<T> exchange(String url, HttpMethod method, HttpEntity<?> requestEntity, ParameterizedTypeReference<T> responseType, Map<String, ?> uriVariables) throws RestClientException; <T> ResponseEntity<T> exchange(URI url, HttpMethod method, HttpEntity<?> requestEntity, ParameterizedTypeReference<T> responseType) throws RestClientException; <T> ResponseEntity<T> exchange(RequestEntity<?> requestEntity, Class<T> responseType) throws RestClientException; <T> ResponseEntity<T> exchange(RequestEntity<?> requestEntity, ParameterizedTypeReference<T> responseType) throws RestClientException;
下面写一个使用例子:
RestTemplate restTemplate = new RestTemplate(); String url = "http://localhost:8080/user"; //设置请求头 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON_UTF8); //创建请求实体对象 HttpEntity<UserVo> request = new HttpEntity<>(newUserVo, headers); //请求服务器 ResponseEntity<User> responseEntity = restTemplate.exchange(url, HttpMethod.POST, request, User.class); //获取响应体 User user = responseEntity.getBody(); //获取响应头 HttpHeaders respHeaders = responseEntity.getHeaders(); //获取响应属性 List<String> success = respHeaders.get("success"); //获取响应状态码 int statusCode = responseEntity.getStatusCodeValue(); //获取资源 String url1 = "http://localhost:8080/user/{id}"; ResponseEntity<User> responseEntity1 = restTemplate.exchange(url1, HttpMethod.GET, null, User.class, id); //获取响应体 User user1 = responseEntity1.getBody();
2. 使用泛型
使用泛型接收响应,这里添加一个返回类型中泛型的使用方法:
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; //创建请求实体对象,这里将参数转换为JSON字符串了 HttpEntity<String> request = new HttpEntity<>(paramJsonStr, headers); //请求服务器 RestTemplate restTemplate = new RestTemplate(); String url = "http://www.baidu.com/task"; ResponseEntity<String> responseEntity = null; try { //统一使用String接收响应,再用Jackson转为对应的实体类 responseEntity = restTemplate.postForEntity(url, request, String.class); //这里使用try...catch是因为有可能因为网络原因出现错误,RestClientException 的子类 ResourceAccessException 异常 } catch (RestClientException e) { e.printStackTrace(); } if (responseEntity != null) { //获取响应体 String body = responseEntity.getBody(); //使用Jackson转为对应的实体类,这里的Result中使用到了泛型,用来应对多种格式 ObjectMapper mapper = new ObjectMapper(); Result<Ret> result = mapper.readValue(body, new TypeReference<Result<Ret>>() {}); if (result != null) { //使用了泛型,不同的请求这里就可以获取到不同类型的data Ret data = result.getData(); System.out.println("data : " + data); } }
@Data public class Result<T> { private String logid; private T data; private Integer status; private String message; private Double st; private Double crt; }
@Data public class Ret { private Boolean ret; private String photoId; }
以上就是SpringBoot使用RestTemplate实现HTTP请求详解的详细内容,更多关于SpringBoot RestTemplate实现HTTP请求的资料请关注脚本之家其它相关文章!