【发布时间】:2021-10-20 13:30:57
【问题描述】:
我在将包含特殊字符的字符串从一个 java 服务传输到另一个 java 服务时遇到问题。这是正在发生的事情。在“客户”上,我有以下电话:
final String url = baseUrl() + "/getOrders";
final UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url);
builder.queryParam("username", username);
final ResponseEntity<TResponse> restResp = restTemplate.exchange(builder.build().toString(), HttpMethod.GET, entity, OrdersResult.class);
在“服务器”端有一个带有以下签名的方法:
@RequestMapping(value = "getOrders", method = RequestMethod.GET)
public OrdersResult getOrders(@RequestParam(value = "username") String username)
问题在于,如果用户名包含任何特殊字符,例如“+”或“|”,用户名字符串会以空格而不是实际字符进入服务器。例如:
“我+我|A+用户”->“我是用户”
我可以通过在客户端手动编码 url 参数来修复它:
builder.queryParam("username", URLEncoder.encode(username, 'UTF-8'));
然后在服务器上解码。
有什么办法可以避免手动编码/解码?
【问题讨论】: