spring boot@datetimeformat对所需的查询参数执行

wljmcqd8  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(269)

使用@datetimeformat注解格式化作为查询参数发送的日期(@requestparam)时,它会自动将空字符串(作为日期接收)转换为null,而不会引发类型不匹配异常。当日期参数是可选的时,这可以正常工作,但是,当设置required=true时,@datetimeformat接受空字符串并将其转换为null而不引发异常,因此不考虑required=true spring属性。这是spring的正常行为吗?是否有任何属性可以传递给@datetimeformat来选择是否可以接受空字符串?

@RequestParam(required = true) @DateTimeFormat(pattern ="yyyy-MM-dd") Date inputDate
tzdcorbm

tzdcorbm1#

我尝试用spring boot 2.4.4的以下代码重现您的问题:

@GetMapping("/")
@ResponseBody
public String demo(@RequestParam(required = true) @DateTimeFormat(pattern = "yyyy-MM-dd") Date inputDate) {
   System.out.println("inputDate: " + inputDate);
   return inputDate.toString();
}

url http://localhost:8080/?inputDate=2021-03-01 给予 Mon Mar 01 00:00:00 CET 2021 在浏览器中
url http://localhost:8080/?inputDate= 以及 http://localhost:8080/ 给予 There was an unexpected error (type=Bad Request, status=400). 在浏览器和 Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required Date parameter 'inputDate' is not present] 在日志中
url http://localhost:8080/?inputDate=x 给予 There was an unexpected error (type=Bad Request, status=400). 在浏览器和 Resolved [org.springframework.web.method.annotation.MethodArgumentTypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.util.Date' 在日志中。
从你的问题我知道这是你想要的。
如果我误解了你的问题,你能澄清一下吗?或者看看你能不能重现我的结果,看看他们是否给了你想要的行为?

p5cysglq

p5cysglq2#

尝试使用 java.time.LocalDate 没有任何 @DateTimeFormat . java.util.Date 是过时的 java.time.* 是用来取代它的。 LocalDate 默认情况下使用iso8601格式,并与“yyyy-mm-dd”匹配。另外,它的parse方法对空字符串抛出异常。

相关问题