请求参数中字符串的+变成了空格

前端请求

后端接收到的结果

在URL中,某些字符(包括空格、+&? 等)需要被编码。具体而言,在URL中,空格通常被编码为 + 或 %20。因此,如果你在请求参数中使用 +,它会被解释为一个空格。

如果你希望在参数中包含字面上的 + 字符,应该使用 URL 编码来表示,即 %2B

例如,如果你有一个参数 param=value+with+plus, 实际的URL应该是:

param=value%2Bwith%2Bplus

### RestTemplate URL 参数中加变成空格的解决方案 当使用 `RestTemplate` 发送 HTTP 请求时,如果 URL 中包含特殊字符如加 (`+`) ,可能会遇到该字符被错误地解释为空格的情况。这主要是由于 URL 编码机制所致,在某些情况下,`RestTemplate` 对 URL 进行默认编码处理时会将加转换为空格。 为了确保 URL 中的加不会被误认为空格,可以采取以下几种方法来解决问题: #### 方法一:手动替换加为 `%20` 一种简单的解决办法是在构建最终发送给服务器的 URL 前,先对手动编译后的 URL 字符串中的加进行替换操作,将其替换成其对应的百分比编码形式即 `%20` 。这种方式适用于已知具体哪些位置可能出现加的情形下[^2]。 ```java String encodedUrl = originalUrl.replace("+", "%20"); ``` 这种方法虽然直接有效,但在实际应用中可能不够灵活,特别是对于动态生成的 URL 或者复杂的查询条件来说不太适用。 #### 方法二:自定义 UriComponentsBuilder 实现更精确控制 另一种更为推荐的方式是利用 Spring 提供的 `UriComponentsBuilder` 工具类来自定义 URI 构建过程,并显式指定如何对待特定字符。这样可以在创建请求之前就正确设置好所有的参数值及其编码规则,从而避免后续不必要的麻烦[^3]。 ```java import org.springframework.web.util.UriComponents; import org.springframework.web.util.UriComponentsBuilder; // 使用 UriComponentsBuilder 来安全地构建带有特殊字符的 URL UriComponents uriComponents = UriComponentsBuilder.fromHttpUrl(baseUrl) .queryParam("paramName", "value with + sign") .build(true); // true 表示自动对参数进行编码 String finalUrl = uriComponents.toUriString(); restTemplate.getForObject(finalUrl, String.class); ``` 通过上述两种途径之一即可有效地防止 `RestTemplate` 将 URL 参数里的加(`+`) 错误解析为空格的问题发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值