文章目录
- 简要说明
- maven依赖
- 样例代码
简要说明
在使用springboot2的restTemplate配合UriComponentsBuilder,UriComponentsBuilder拿到uri字符串时有编码过程,而restTemplate在execute时,底层也是有encode编码,这样就到时了双重编码,接收方解码后仍然没法正确处理参数
maven依赖
<!--web包里面有restTemplate-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
样例代码
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl("http://192.168.10.111:8080/test")
.queryParam("name", name);
String uriString = builder.toUriString();
toUriString() 是有encode的,具体如下:
而且使用restTemplate的get方法时,底层也再次encode
String forObject = restTemplate.getForObject(uriString, String.class);
点击 getForObject方法
继续往下看
所以使用restTemplate时,针对get请求的参数,不需要硬编码,也不需要使用UriComponentsBuilder的toUriString()