Spring Boot 处理传递给Integer变量的非数字字符的验证

6ju8rftf  于 2022-12-12  发布在  Spring
关注(0)|答案(1)|浏览(293)

如果我在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\"
bqf10yzr

bqf10yzr1#

答案很简短:否。这是因为验证是针对Integer year字段配置的。这意味着必须先填充该字段,然后才能对其进行验证。如果提交的值无法解析为Integer,则填充将失败。
处理这种情况的最好方法是为Map异常添加错误处理。
另一种方法是将该字段更改为String。这允许您使用@Pattern,但您需要自己进行转换。这可以在类本身中使用getter来完成。

相关问题