为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

天涯尽头无女友 2023-06-14 16:12:04
我正在尝试使用 @RequestParam 获取 ISO 字符串并将其解析为日期。使用下面的代码,我尝试用http://localhost:8989/api/v1/test?date=2019-08-19%2000:00:00.000+0000但是结果是400 Bad Request,当我把日期值的类型改成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 回答

?
森林海

TA贡献2011条经验 获得超2个赞

url参数必须编码

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

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

这将解决

2019-08-19%2000:00:00.000%2B0000


查看完整回答
反对 回复 2023-06-14
?
繁花如伊

TA贡献2012条经验 获得超12个赞

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

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

执行此翻译的嵌入式 tomcat 服务器和 spring 甚至不参与此操作。如类代码中所示,没有配置可以更改此行为。所以你必须忍受它


查看完整回答
反对 回复 2023-06-14
?
慕容708150

TA贡献1831条经验 获得超4个赞

这是我笔记本电脑上的快速测试。我的控制器


 @GetMapping(value = "/api/{version}/test", produces = "application/json")

    public SuccessResult getFreeList(@PathVariable String version,

            @RequestParam("date") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) Date date) {

        System.out.println(date);

        SuccessResult result = new SuccessResult();

        result.setDate(date);

        return result;

    }

我的输出对象


public class SuccessResult {


    String message = "success";


    Date date;


    public Date getDate() {

        return date;

    }


    public void setDate(Date date) {

        this.date = date;

    }


    public String getMessage() {

        return message;

    }


    public void setMessage(String message) {

        this.message = message;

    }

}


到达端点的 url


http://localhost:8080/api/v1/test?date=2019-08-19T00:00:00.000%2B00:00

结果


{"message":"success","date":1566172800000}


查看完整回答
反对 回复 2023-06-14
  • 3 回答
  • 0 关注
  • 239 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信