【问题标题】:Spring application/x-www-form-urlencoded prevent encoding of stringSpring application/x-www-form-urlencoded 防止字符串编码
【发布时间】:2021-10-27 15:37:08
【问题描述】:

我们有一个@PostMapping,它是一个提供给第三方的 webhook,每当第三方发生事件时都会调用它。

@PostMapping(path = "/some-api", consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
public void proessWebhook(@RequestBody String request) {

请求字符串键在String request 中编码。对于我们的内部要求,当 spring 将其设置为 String request 变量时,我们需要不预编码密钥。我们尝试对变量进行 URL 解码,但问题是存在我们不想解码的值,因此解码整个字符串会解码键和值。

例如,如果在 CURL 请求中输入为 some key=some%20value,则请求变量将设置为 some%20key=some%20value。而我们只需要解码密钥。

除此之外,参数的顺序也会随着输入的变化而变化,重要的是顺序必须相同。

我们该怎么做?

【问题讨论】:

  • 你试过@RequestBody MultiValueMap<String, String>params` 吗?

标签: java spring spring-boot spring-mvc


【解决方案1】:

如果您的方法参数是 MultiValueMap 类型,您可以使用 @RequestParam 或 @RequestBody 注释将其与 HTTP 请求的正文适当地绑定。

@PostMapping(
path = "/some-api",
consumes = {MediaType.APPLICATION_FORM_URLENCODED_VALUE})
public ResponseEntity<String> funName(
@RequestParam MultiValueMap<String,String> paramMap) throws Exception {
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    相关资源
    最近更新 更多