【问题标题】:Spring Web REST call special characters encodingSpring Web REST 调用特殊字符编码
【发布时间】: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'));

然后在服务器上解码。

有什么办法可以避免手动编码/解码?

【问题讨论】:

    标签: java spring rest


    【解决方案1】:

    在浏览器端查询参数通常用encodeUriComponent 编码。因此,可以正确传输特殊字符。然后服务器应用程序将字符串解码为原始值。

    因此,我认为您提出的方法没有问题。

    【讨论】:

    • 是的,完全正确。在我们的 Angular 端有一个 encodeUriComponent。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 2016-10-19
    • 1970-01-01
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多