无法通过@RequestParam Spring @RestController 解码 url 查询参数
Posted
技术标签:
【中文标题】无法通过@RequestParam Spring @RestController 解码 url 查询参数【英文标题】:Having a trouble with decoding a url query parameter by @RequestParam Spring @RestController 【发布时间】:2022-01-15 01:32:20 【问题描述】:网址看起来像:/getUserConnectionsList?login=**********&pagelimit=25&page=1&ot=asc&of=openDatetime§ion=userActivity
@PostMapping(path = "getUserConnectionsList", params = "login")
public String getUserConnectionsList(@RequestParam String login,
@RequestParam(required = false) String pagelimit,
@RequestParam(required = false) String page,
@RequestParam(required = false) String from,
@RequestParam(required = false) String to,
@RequestParam(required = false) String ot,
@RequestParam(required = false) String of)
log.debug("test: , , , ", login, page, ot, of);
输出如下:
测试:**********, 1, asc, openDatetime§ion=userActivity
很明显,openDatetime 之后的以下字符 - “§”,被解释为 html ENTITY '§'。但是我想知道如何在映射级别解决这个问题,以避免将字符串中的字符转换为我不需要的值时出现进一步的情况。
【问题讨论】:
您的媒体类型是“application/x-www-form-urlencoded”吗?如果您想避免转换为 html 实体,可以将媒体类型更改为“text/plain”或重命名变量。 重命名变量是行不通的,因为项目已经很大了,很多逻辑已经绑定到它上面。好吧,我想以正确的方式解决问题,因为理论上不应该出现这样的错误。试过content-type: text/plain;charset=UTF-8
,它什么也没给:(
【参考方案1】:
在我看来,您的客户端可能会出现编码错误,因为如果我使用 postman 调用带有 spring-boot-starter-web 2.6.1 的控制器代码,它可以正常工作。
【讨论】:
谢谢,提高版本有帮助:) 奇怪的是没有指定spring的版本,gradle安装的版本有bug。 取消。错误并没有消失。升级版本没有帮助:( implementation 'org.springframework.boot:spring-boot-starter-web:2.6.1' 你用什么客户端来发送post请求? reqbin.com 或axios
来自代码以上是关于无法通过@RequestParam Spring @RestController 解码 url 查询参数的主要内容,如果未能解决你的问题,请参考以下文章