今日份鸡汤:一杯咖啡,一片饱含核桃仁、葡萄干的大列巴,美好的一天,从美味的早餐开始啦~
其实这个问题是某人昨天遇到的,昨天太晚了就没整理,今天来记录一下吧。
问题描述:
某人:我的test类,发请求,我的应用收不到参数,但是如果拼URL里或者postman就可以。


问题分析:
既然postman和拼url的形式可以,那就一定是RestTemplate发送Get请求有什么特殊的要求,那就查一下吧,果然是有限制的:RestTemplate发送Get请求需要将请求Url用占位符。
问题解决:
将请求更改为这个样子就可以了呢:String url = "http://www.test.com/test/str?s={s}";
来吧,上demo,没有比这个更直观的了~
程序代码:
public class RestTemplateDemo{
public static void main(String[] args) {
/**
* 使用HashMap封装参数方式
*/
String url = "http://www.test.com/?Action=QueryUsers";
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url);
url = builder.queryParam("name", "Tom").build().encode().toString();
System.out.println("url = " + url);//http://www.test.com?name=Tom
Map<String,String> param = new HashMap<>();
param.put("name","Jack");
param.put("age","18");
param.entrySet().stream().forEach(o -> builder.queryParam(o.getKey(),o.getValue()));
url = builder.build().encode().toString();
System.out.println("url = " + url);//http://www.test.com?name=Tom&name=Jack&age=18
/**
* 使用IdentityHashMap封装参数方式
*/
String uri = "http://www.test.com/?Action=QueryUsers";
Map<String, String> params = new IdentityHashMap<>();
params.put(new String("name"),"Jack");
params.put(new String("name"),"Tom");
params.put("age","18");
UriComponentsBuilder uBuilder = UriComponentsBuilder.fromHttpUrl(uri);
params.entrySet().stream().forEach(o -> uBuilder.queryParam(o.getKey(),o.getValue()));
uri = uBuilder.build().encode().toString();
System.out.println("uri = " + uri);//http://www.test.com/?Action=QueryUsers&age=18&name=Jack&name=Tom
}
}
运行结果:

这篇就到这吧,小demo还练习了一下昨天的内容,温故而知新,值~
网友评论