如何用Java的@Pattern校验数值是否大于18?报错问题求解
问题原因及解决方法
错误原因
@Pattern注解是专门用来校验字符串类型数据的,而你的age字段是Integer数值类型,所以校验框架找不到对应的校验器,才会抛出这个错误。
正确修改方案
方案1:使用专门的数值校验注解(推荐)
直接用@Min注解替代@Pattern,这是JSR-380规范中专门为数值类型设计的最小值校验注解,完全匹配你“数值大于18”的需求:
@Min(value = 19, message = "年龄必须大于18") private Integer age;
注:设置value=19是因为要满足“大于18”,也就是最小允许值为19。
方案2:改用字符串类型配合正则(不推荐)
如果一定要用正则校验,需要把age字段改为String类型,同时修正正则里的转义符(原代码里的\d要写成\\d):
@Pattern(regexp = "18|19|[2-9][0-9]|\\d{3,}", message = "年龄必须大于18") private String age;
这种方式需要额外处理字符串转数值的逻辑,不如方案1简洁高效,仅作特殊场景参考。
内容的提问来源于stack exchange,提问作者alqueen
相关产品推荐
相关产品推荐

