我们有一个@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
。而我们只需要解码密钥。
最重要的是,参数的顺序也会随着输入而改变,因此保持顺序相同是很重要的。
我们该怎么做呢?
如果您的方法参数是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 {
}