Javax实体校验@Min与@Max同值时失效问题(手机号需10位)
问题根源
你用错注解了!@Min和@Max是用来校验数值大小范围的,不是校验数字的位数。比如你输入的10位数字是1000000000,这个数值远大于@Max(value=10)设置的10,所以即使是10位数字,也会触发校验失败。
解决方案
根据你的需求(手机号必须是10位),有两种正确的实现方式:
方式一:保留Long类型,使用@Digits注解
@Digits专门用来限制数字的整数位和小数位长度,适合数值类型的位数校验:
@NotNull(message = "Mobile number cannot be null.") @Digits(integer = 10, fraction = 0, message = "Mobile number length should be 10 characters.") @Column(name = "mob_no") private Long mobNo;
integer=10:限制整数部分最多10位fraction=0:不允许有小数部分
方式二:改用String类型存储手机号(更推荐)
手机号本质上是字符串(不需要做数值运算,可能带特殊前缀),用@Size注解直接限制长度更合理:
@NotNull(message = "Mobile number cannot be null.") @Size(min = 10, max = 10, message = "Mobile number length should be 10 characters.") @Column(name = "mob_no") private String mobNo;
这种方式更贴合手机号的业务场景,也避免了数值类型带来的范围限制(比如超过Long最大值的情况)。
内容的提问来源于stack exchange,提问作者Deepak Kumar
相关产品推荐
相关产品推荐

