【问题标题】:Spring Controller replacing + character in parameter with whitespaceSpring Controller 用空格替换参数中的 + 字符
【发布时间】:2021-01-21 16:00:25
【问题描述】:

我有一个带有 2 个参数的控制器 -

@PostMapping(value = "/myEndPoint")
public ResponseEntity<StreamingResponseBody> process(final InputStream data,
                                                               @RequestParam final String param1,
                                                               @RequestParam final String base64Param)  {
    return ok().body(doSomething(base64Param.getBytes(), param1, data));
}

base64Param 字符串参数将包含+ 字符,但当然 Spring 控制器会将这些替换为空格。

你知道我该如何解决这个问题并告诉控制器不要管+字符吗?

更新 - 我试过了

UriComponentsBuilder builder = fromUriString(format("http://localhost:%s/%s", serverPort, "/myEndPoint"))
            .queryParam("param1", param1)
            .queryParam("base64Param", Base64.getUrlEncoder().encodeToString(base64ParamValueWithPluses.getBytes()));

但我必须像这样在我的控制器中解码 base64Param 参数 -

String decodedBaseParam64 = Base64.getUrlDecoder().decode(encodeBaseParam64);

有没有办法对此进行编码,以便 Spring 自动解码并保留 + 字符?

【问题讨论】:

  • 这是因为+ 是 URL 编码中的特殊字符。尝试将其作为%2B 发送到您的网络服务器。
  • 我试过了,%2B 解决方案不起作用,因为控制器将其替换为空格。

标签: java spring controller base64 encode


【解决方案1】:
URI uri = fromUriString(format("http://localhost:%s/%s", serverPort, "/myEndPoint"))
            .queryParam("param1", param1)
            .queryParam("base64Param", "{base64Param}")
            .build(base64Param);

来源 - https://github.com/spring-projects/spring-framework/issues/21577

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多