使用@datetimeformat注解格式化作为查询参数发送的日期(@requestparam)时,它会自动将空字符串(作为日期接收)转换为null,而不会引发类型不匹配异常。当日期参数是可选的时,这可以正常工作,但是,当设置required=true时,@datetimeformat接受空字符串并将其转换为null而不引发异常,因此不考虑required=true spring属性。这是spring的正常行为吗?是否有任何属性可以传递给@datetimeformat来选择是否可以接受空字符串?
@RequestParam(required = true) @DateTimeFormat(pattern ="yyyy-MM-dd") Date inputDate
2条答案
按热度按时间tzdcorbm1#
我尝试用spring boot 2.4.4的以下代码重现您的问题:
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'
在日志中。从你的问题我知道这是你想要的。
如果我误解了你的问题,你能澄清一下吗?或者看看你能不能重现我的结果,看看他们是否给了你想要的行为?
p5cysglq2#
尝试使用
java.time.LocalDate
没有任何@DateTimeFormat
.java.util.Date
是过时的java.time.*
是用来取代它的。LocalDate
默认情况下使用iso8601格式,并与“yyyy-mm-dd”匹配。另外,它的parse方法对空字符串抛出异常。