在 Spring MVC 中禁用 URL 解码

Whe*_*der 1 spring-mvc kotlin spring-boot

我有以下端点

@RequestMapping("missedcall")
fun missedCall(@RequestParam("v") encryptedValue : String, model: 
ModelMap): String {
    //decrypt encryptedValue here
}
Run Code Online (Sandbox Code Playgroud)

当我使用“ http://myurl.com/missedcall?v=this+is+my+encrypted+string ”执行此端点时,encryptedValue 初始化为“这是我的加密字符串”。我实际上想要这些优点,因为它们是加密的一部分,没有它们我无法解密字符串。

解决方法是对字符串进行 URL 编码以恢复加号和其他特殊字符,但是有没有更干净的方法呢?也许禁用此特定端点的 URL 解码?

注意:我无法在正文中传递此参数,它必须是查询字符串的一部分。另外,这是用 Kotlin 编写的,但我 100% 确定 Java 也有类似的问题,所以不要对 Kotlin 感到灰心:)。

Sea*_*oyd 5

任何 Web 框架都会为您解密查询路径,这是预期的行为。如果这不是您想要的,您将必须定义 HttpServletRequest 类型的方法参数并使用 自己解析查询HttpServletRequest.getQueryString()