【问题标题】:Having a trouble with decoding a url query parameter by @RequestParam Spring @RestController无法通过@RequestParam Spring @RestController 解码 url 查询参数
【发布时间】: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,它什么也没给:(

标签: java spring spring-boot rest spring-boot-starter


【解决方案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.comaxios 来自代码
猜你喜欢
  • 2023-03-26
  • 1970-01-01
  • 2017-07-11
  • 1970-01-01
  • 2015-03-21
  • 2019-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多