【发布时间】:2021-01-25 10:42:00
【问题描述】:
我正在尝试在 Spring 应用程序中调用通过 GET 方法公开的 REST API。发送请求时,我注意到控制器不支持某些字符,并在控制器代码执行之前立即返回 400 BAD_REQUEST 错误。
重现错误的字符:
[]{}|\
以下所有其他字符都不会重现该错误:
&+<>$?!@°*~#"'/
工作请求示例:
http://localhost:8888/api?a=&b=Hello&c=&d=&e=0&f=1
非工作请求示例:
http://localhost:8888/api?a=&b=%5BHello&c=&d=&e=0&f=1
字符串中字符的位置对这个错误没有任何影响。 当上述六个字符之一出现在任何字符串参数中时,就会出现此错误。
这是控制器代码:
@GetMapping
public ResponseEntity<Object> getEmails(
@RequestParam(required = false, name = "a") String a,
@RequestParam(required = false, name = "b") String b,
@RequestParam(required = false, name = "c") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime c,
@RequestParam(required = false, name = "d") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime d,
@RequestParam(name = "e") Integer e,
@RequestParam(name = "f") Integer f
) {
return new ResponseEntity<>(myService.doSomeStuff(a, b, c, d, e, f), HttpStatus.OK);
}
我们使用 Spring 以及以下 Jackson 依赖项:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.3</version>
</dependency>
【问题讨论】: