如果我在GET请求中发送一个非数字值的年份,是否有一个注解可以用来防止Java应用程序抛出以下错误?
我目前拥有:
@NotNull
@Digits(integer = 4, fraction = 0, message = "Provide valid Year in the format YYYY")
@Min(value = 1900, message = "Year must be greater than 1900")
private Integer year;
当我传递一个带有字母的值时,在@Digits
和@Min
执行之前,我得到了一个NumberFormatException
。我也尝试了带有regex值的@Pattern,但这导致了500错误。
"Failed to convert property value of type 'java.lang.String' to required type 'java.lang.Integer' for property 'yearOfReg'; nested exception is java.lang.NumberFormatException: For input string: \"20c15\"
1条答案
按热度按时间bqf10yzr1#
答案很简短:否。这是因为验证是针对
Integer year
字段配置的。这意味着必须先填充该字段,然后才能对其进行验证。如果提交的值无法解析为Integer
,则填充将失败。处理这种情况的最好方法是为Map异常添加错误处理。
另一种方法是将该字段更改为
String
。这允许您使用@Pattern
,但您需要自己进行转换。这可以在类本身中使用getter来完成。