关于RestTemplate中的Get请求
作者:chengqiuming
这篇文章主要介绍了关于RestTemplate中的Get请求,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
RestTemplate的Get请求
getForEntity系列函数
函数原型:
1 getForEntity(String url,Class responseType,Object ... urlVariables) 2 getForEntity(String url,Class responseType,Map urlVariables) 3 getForEntity(URI url,Class responseType)
实例:
public String hello() { StringBuilder result = new StringBuilder(); // GET //方式一 result.append(restTemplate.getForEntity("http://HELLO-SERVICE/hello", String.class).getBody()).append(" "); //方式二 result.append(restTemplate.getForEntity("http://HELLO-SERVICE/hello1?name={1}", String.class, "didi").getBody()).append(" "); //方式三 Map<String, String> params = new HashMap<>(); params.put("name", "dada"); result.append(restTemplate.getForEntity("http://HELLO-SERVICE/hello1?name={name}", String.class, params).getBody()).append(" "); //方式四 UriComponents uriComponents = UriComponentsBuilder.fromUriString( "http://HELLO-SERVICE/hello1?name={name}") .build() .expand("dodo") .encode(); URI uri = uriComponents.toUri(); result.append(restTemplate.getForEntity(uri, String.class).getBody()).append(" "); }
getForObject系列函数
函数原型
1 getForObject(String url,Class responseType,Object ... urlVariables) 2 getForObject(String url,Class responseType,Map urlVariables) 3 getForObject(URI url,Class responseType)
实例:
RestTemplate restTemplate = new RestTemplate(); String result=restTemplate.getForObject(uri,String.class) //当body是一个User对象时,可以直接这样实现: RestTemplate restTemplate = new RestTemplate(); User result=restTemplate.getForObject(uri,User.class)
RestTemplate get请求多参数 使用记录和简单封装
使用RestTemplate发送get请求时,如果有多个参数拼接起来会比较麻烦,在此做个简单的封装。
接收端Controller
@GetMapping(value = "/get/getByKeyword", produces = {"application/json;charset=UTF-8"}) public String getByKeyword (@RequestParam(name = "name") String name,@RequestParam(name = "keyword") String keyword) { System.out.println(name+","+keyword); return name+","+keyword; }
发送请求
package xxx; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.springframework.web.client.RestTemplate; public class RestTemplateUtil { public static void main(String[] args) { Map<String, Object> paramMap = new HashMap<>(); paramMap.put("name", "中国"); paramMap.put("keyword", "YYDS"); String aa = getForObject("http://127.0.0.1:8888/get/getKeyword", paramMap); System.out.println(aa); } /** * 封装的get请求,暂时只支持map传参,并且value只支持基本类型和String * * @param url * @param object * @return */ private static String getForObject(String url, Object object) { StringBuffer stringBuffer = new StringBuffer(url); if (object instanceof Map) { Iterator iterator = ((Map) object).entrySet().iterator(); if (iterator.hasNext()) { stringBuffer.append("?"); Object element; while (iterator.hasNext()) { element = iterator.next(); Map.Entry<String, Object> entry = (Map.Entry) element; //过滤value为null,value为null时进行拼接字符串会变成 "null"字符串 if (entry.getValue() != null) { stringBuffer.append(element).append("&"); } url = stringBuffer.substring(0, stringBuffer.length() - 1); } } } else { throw new RuntimeException("url请求:" + url + "请求参数有误不是map类型"); } System.out.println("url请求:" + url); return new RestTemplate().getForObject(url, String.class); } }
控制台输出日志
url请求:http://127.0.0.1:8888/get/getKeyword?name=中国&keyword=YYDS
log4j:WARN No such property [datePattern] in org.apache.log4j.ConsoleAppender.
中国,YYDS
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。