我试图在spring应用程序中调用通过get方法公开的restapi。在发送请求时,我注意到控制器不支持某些字符,并在执行控制器代码之前立即返回一个400 bad\u请求错误。
复制错误的字符:
[]{}|\
所有其他字符(如以下字符)都不会重现该错误:
&+<>$?!@°*~#"'/
工作请求示例:
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>
1条答案
按热度按时间drkbr07n1#
您需要在客户端对url进行编码。
http://localhost:8083?a=asd[
你应该以这个结束http://localhost:8083?a=asd%5B
客户端通常提供url编码功能,请查看其文档。如果您正在使用postman这样的客户机进行测试,那么您可以右键单击地址栏,在那里您可以选择对url进行编码。有些角色像
[
被认为是允许的但不安全的字符,这就是为什么需要编码。以后编辑:
我已经测试了你的代码和请求,一切正常。我所做的唯一更改是在controller方法中返回字符串而不是响应实体。