一尘不染

Spring Boot:防止对@RequestParam进行解码

spring-boot

我有一个在Tomcat 8.5上运行的Spring-Boot(1.5.3)应用程序。在其中,我有一个带有单个参数的RestController。

此参数会自动解码-
这对于我的应用程序中的所有其他控制器都很好,但是对此,我需要原始请求数据,因为它们将在另一个请求中使用。请注意,我只想对此控制器/请求禁用自动解码,并在其他地方保持正常行为。

@RestController
@RequestMapping("/rest/test")
public class TestController {

  @RequestMapping("/test")
  public ResponseEntity<String> test(@RequestParam final String test){
    return ResponseEntity.ok("Requested: " + test);
  }
}

现在,如果我发送访问

curl localhost/rest/test/test?test=%C3%B6%20%C3%A4

我收到输出:

Requested: ö ä

我想拥有

Requested: %C3%B6%20%C3%A4

有任何想法吗?


阅读 1449

收藏
2020-05-30

共1个答案

一尘不染

如果仅在单个位置需要此行为,则可以使用控制器主体内部的标准Java
URLEncoder将参数编码回原始形式:

@RequestMapping("/test")
public ResponseEntity<String> test(@RequestParam final String test) {
  String encodedParam = URLEncoder.encode(test, "UTF-8");
  return ResponseEntity.ok("Requested: " + encodedParam);
}
2020-05-30