Spring Boot使用RestTemplate发送get请求,获取不到参数的问题

错误案例

使用RestTemplate发送GET请求,发现后端接收不到请求参数

String url = "http://api.xxx.xxx";
//模拟请求参数
Map map = new HashMap<>();
map.put("name", "Joe.Ye");
map.put("age", "18");

String result = restTemplate.getForObject(url, String.class, map);

发现一直拿不到name和age

正确姿势

URL拼接query参数

String url = "http://api.xxx.xxx?name={name}&age={age}";

UriCompoentBuilder方式(优雅、推荐)

HttpHeaders headers = new HttpHeaders();
headers.add("accept", "*/*");
HttpEntity<JSONObject> httpEntity = new HttpEntity<JSONObject>(null, headers);

UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url)
        .queryParam("id", "10");

ResponseEntity<JSONObject> response = restTemplate.exchange(builder.build().toUri(), HttpMethod.GET, httpEntity, JSONObject.class);
String url = "https://www.appblog.cn";
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url);
String url2 = builder.queryParam("name", "Joe.Ye").build().encode().toString();
System.out.println("url2 = " + url2); //https://www.appblog.cn?name=Joe.Ye

Map<String,String> param = Maps.newHashMap();
param.put("name", "Joe.Ye");
param.put("age", "18");
param.entrySet().stream().forEach(o -> builder.queryParam(o.getKey(),o.getValue()));
String url3 = builder.build().encode().toString(); //https://www.appblog.cn?name=Joe.Ye&age=18
System.out.println("url3 = " + url3);

//ResponseEntity<String> rsp = restTemplate.getForEntity(url3, String.class);
上一篇 Sping Boot返回Json格式自定义
下一篇 Spring Boot使用RestTemplate批量下载文件
目录
文章列表
1 RandomStringUtils工具类
RandomStringUtils工具类
2
Android NDK基础13:JNI异常处理_JNI缓存策略
Android NDK基础13:JNI异常处理_JNI缓存策略
3
Groovy代码示例 - 如何为groovy脚本编译后的class文件指定名字?
Groovy代码示例 - 如何为groovy脚本编译后的class文件指定名字?
4
OpenLDAP + phpLDAPadmin
OpenLDAP + phpLDAPadmin
5
Android颜色渐变(gradient)实现
Android颜色渐变(gradient)实现
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。