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请求的资料请关注脚本之家其它相关文章!
相关文章
SpringBoot 项目中的图片处理策略之本地存储与路径映射
在SpringBoot项目中,静态资源存放在static目录下,使得前端可以通过URL来访问这些资源,我们就需要将文件系统的文件路径与URL建立一个映射关系,把文件系统中的文件当成我们的静态资源即可,本文给大家介绍SpringBoot本地存储与路径映射的相关知识,感兴趣的朋友一起看看吧2023-12-12SpringBoot使用MapStruct生成映射代码的示例详解
MapStruct 是一个用于 Java 的代码生成器,专门用于生成类型安全的 bean 映射代码,它通过注解处理器在编译时生成映射代码,从而避免了运行时的性能开销和潜在的错误,本文给大家介绍了SpringBoot使用MapStruct生成映射代码的示例,需要的朋友可以参考下2024-11-11springboot vue接口测试前后端树节点编辑删除功能
这篇文章主要为大家介绍了springboot vue接口测试前后端树节点编辑删除功能,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-05-05【Redis缓存机制】详解Java连接Redis_Jedis_事务
这篇文章主要介绍了【Redis缓存机制】详解Java连接Redis_Jedis_事务,详细的介绍了Jedis事务和实例,有兴趣的可以了解一下。2016-12-12springboot 配置文件配置项前缀为0的数字特殊处理方式
这篇文章主要介绍了springboot 配置文件配置项前缀为0的数字特殊处理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-02-02
最新评论