无法通过@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&section=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 之后的以下字符 - “&sect”,被解释为 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 查询参数的主要内容,如果未能解决你的问题,请参考以下文章

spring 注解上传文件 @RequestParam

spring boot 打成jar包后 通过命令行传入的参数怎么获得

Spring之byte[]传输

Spring Controller getpost传参解析

Spring Controller getpost传参解析

Spring MVC @RequestParam