@RequestParam接收到的加号(+)被替换为空格

IT小君   2023-10-24T23:49:34

我正在尝试使用@RequestParam来获取ISO字符串,并将其解析为Date。

使用下面的代码,我尝试使用http://localhost:8989/api/v1/test?date=2019-08-19%2000:00:00.000+0000进行测试。

但结果是400 Bad Request,当我将date值的类型更改为String时,它是2019-08-19 00:00:00.000 0000

public class myController {

    @GetMapping(value = "/api/{version}/test", produces = "application/json")
    public ResponseEntity<MyList> getFreeList(
        @PathVariable
        String version,
        @RequestParam("date")
        @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSSZ")
        Optional<Date> date) {
            return new ResponseEntity<>(myService.getList(
                date.orElse(null)),
                HttpStatus.OK);
    }
}

我不能改变URL格式。如何正确获取加号符号?

评论(3)
IT小君

URL参数必须进行编码

这是调用者的责任。 如果调用者使用Java,他可以简单地将值设置为:

URLEncoder.encode("2019-08-19 000:00:00.000+0000", "UTF-8");

这将被解析为

2019-08-19%2000:00:00.000%2B0000
2023-10-24T23:50:05   回复
IT小君

这是一个已知行为,你可以发送%2B而不是+

http://localhost:8989/api/v1/test?date=2019-08-19%2000:00:00.000%2B0000

嵌入的tomcat服务器会进行翻译,而spring甚至不参与此过程。没有配置项可以改变这个行为,就像类代码中所看到的。所以你必须接受它。

2023-10-24T23:50:24   回复
wqeqeqw
1111
2024-03-05T16:56:35   回复
wqeqeqw
1111
2024-03-05T16:56:36   回复
wqeqeqw
1111
2024-03-05T16:56:37   回复