Java中RestTemplate调用API的几种常用写法
作者:咖啡Beans
本文介绍了RestTemplate调用http的几种写法,包括post+get,及传递参数的方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
摘要
本文介绍了RestTemplate调用http的几种写法,包括post+get,及传递参数的方式,让我们拿下它。
可选配置
依赖坐标pom.xml
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.14</version> </dependency> <!-- 统一使用依赖注入 private final RestTemplate restTemplate; -->
自定义配置
package org.coffeebeans.resttemplate; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.client.RestTemplate; /** * <li>ClassName: RestTemplateConfig </li> * <li>Author: OakWang </li> */ @Configuration publicclassRestTemplateConfig { @Bean public RestTemplate restTemplate() { HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(); factory.setConnectTimeout(30000); // 连接超时时间(毫秒) factory.setReadTimeout(30000); // 读取超时时间(毫秒) RestTemplate restTemplate = new RestTemplate(factory); MappingJackson2HttpMessageConverterjsonConverter = new MappingJackson2HttpMessageConverter(); restTemplate.getMessageConverters().add(jsonConverter);// 添加JSON消息转换器 return restTemplate; } }
实现get请求
- GET+空参
String requestUrl = "https://jsonplaceholder.typicode.com/posts/1"; ResponseEntity<String> response = restTemplate.getForEntity(requestUrl, String.class); if (Objects.equals(HttpStatus.OK, response.getStatusCode())) { log.info("请求响应结果: {}, {}", requestUrl, response.getBody()); // 解析... }
- GET+单参
String requestUrl = "https://jsonplaceholder.typicode.com/posts/{id}"; ResponseEntity<String> response = restTemplate.getForEntity(requestUrl, String.class, 1); // 参数值为 1 if (Objects.equals(HttpStatus.OK, response.getStatusCode())) { log.info("请求响应结果: {}, {}", requestUrl, response.getBody()); // 解析... }
- GET+多参-方式1
String requestUrl = "https://jsonplaceholder.typicode.com/comments?id={id}&email={email}"; Map<String, Object> params = new HashMap<>(); params.put("id", 1); params.put("email", "Eliseo@gardner.biz"); ResponseEntity<String> response = restTemplate.getForEntity(requestUrl, String.class, params); if (Objects.equals(HttpStatus.OK, response.getStatusCode())) { log.info("请求响应结果: {}, {}", requestUrl, response.getBody()); // 解析... }
- GET+多参-方式2
String requestUrl = UriComponentsBuilder.fromHttpUrl("https://jsonplaceholder.typicode.com/posts/1/comments") .queryParam("id", "3") .queryParam("email", "Nikita@garfield.biz") .toUriString(); ResponseEntity<String> response = restTemplate.getForEntity(requestUrl, String.class); if (Objects.equals(HttpStatus.OK, response.getStatusCode())) { log.info("请求响应结果: {}, {}", requestUrl, response.getBody()); // 解析... }
实现post请求
- POST+空参
String requestUrl = "https://jsonplaceholder.typicode.com/posts"; ResponseEntity<Object> response = restTemplate.postForEntity(requestUrl, null, Object.class); if (Objects.equals(HttpStatus.CREATED, response.getStatusCode())) { log.info("请求响应结果: {}, {}", requestUrl, response.getBody()); // 解析... }
- POST+JSON 实体对象参数
String requestUrl="https://jsonplaceholder.typicode.com/posts"; List<MyEntity> entityList = new ArrayList<>(); //对象参数 entityList.add(MyEntity.builder().title("foo").body("bar").userId("1").build()); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); headers.set("Authorization", ""); HttpEntity<Object> requestEntity = new HttpEntity<>(entityList, headers); ResponseEntity<Object> response = restTemplate.postForEntity(requestUrl, requestEntity, Object.class); if (Objects.equals(HttpStatus.CREATED, response.getStatusCode())) { log.info("请求响应结果: {}, {}", requestUrl, response.getBody()); // 解析... }
- POST+JSON 对象参数
String requestUrl="https://jsonplaceholder.typicode.com/posts"; Map<String, String> params = new HashMap<>(); params.put("title", "foo"); params.put("body", "bar"); params.put("userId", "1"); MultiValueMap<String, String> form = new LinkedMultiValueMap<>(); for (Map.Entry<String, String> entry : params.entrySet()) { form.add(entry.getKey(), entry.getValue()); } HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(form, headers); ResponseEntity<Object> response = restTemplate.postForEntity(requestUrl, requestEntity, Object.class); if (Objects.equals(HttpStatus.CREATED, response.getStatusCode())) { log.info("请求响应结果: {}, {}", requestUrl, response.getBody()); // 解析... }
- POST+表单提交
String requestUrl="https://"; // 1. 初始化参数 Map<String, String> params = new HashMap<>(); params.put("title", "foo"); // 2. 构造 MultiValueMap MultiValueMap<String, String> form = new LinkedMultiValueMap<>(); for (Map.Entry<String, String> entry : params.entrySet()) { form.add(entry.getKey(), entry.getValue()); } // 3. 设置请求头 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); // 4. 发送请求 返回Object或者指定类型 HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(form, headers); ResponseEntity<Object> response = restTemplate.postForEntity(requestUrl, requestEntity, Object.class); //5.处理结果 if (Objects.equals(HttpStatus.OK, response.getStatusCode())) { log.info("请求响应结果: {}, {}", requestUrl, response.getBody()); // 解析... }
总结
以上我们整理了RestTemplate调用接口的几种用法,包括post+get,空参、单参、多参的使用场景。
到此这篇关于Java中RestTemplate调用API的几种常用写法的文章就介绍到这了,更多相关Java RestTemplate调用API内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!