我有以下端点
@RequestMapping("missedcall")
fun missedCall(@RequestParam("v") encryptedValue : String, model:
ModelMap): String {
//decrypt encryptedValue here
}
当我使用“http://myurl.com/missedcall?v=this+is+my+encrypted+string”执行此端点时,encryptedValue初始化为“这是我的加密字符串”。我实际上想要加号,因为它们是加密的一部分,如果没有它们我就无法解密字符串。
解决方法是将URL编码回字符串以恢复其他特殊字符,但是有更清洁的方法吗?也许禁用此特定端点的URL解码?
注意:我无法在正文中传递此参数,它必须是查询字符串的一部分。这也是用Kotlin写的,但我100%肯定Java有类似的问题,所以不要觉得Kotlin气馁:)。
答案 0 :(得分:3)
任何Web框架都会为您解密查询路径,因为这是预期的行为。如果这不是你想要的,你将不得不定义一个类型为HttpServletRequest的方法参数,并使用HttpServletRequest.getQueryString()
自己解析查询。
答案 1 :(得分:0)
感谢@SeanPatrickFloyd,将其实现为
@RequestMapping("missedcall")
fun missedCall(request: HttpServletRequest, model: ModelMap): String {
val encodedValue = request.queryString.split("=")[1]
//decrypt encryptedValue here
}