You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 16:32:05