javax 实体验证不适用于具有相同值的@Min和@Max(如 moblieNo 应为精确的 10 位数字)

javax entity validation is not working for @Min and @Max having same value(like moblieNo should be of exact 10 digits)

提问人:Deepak Kumar 提问时间:11/9/2023 更新时间:11/11/2023 访问量:38

问:

    @NotNull(message = "Mobile number cannot be null.")
@Max(value = 10, message ="Mobile number length should be 10 characters." )
@Min(value = 10, message ="Mobile number length should be 10 characters." )
@Column(name = "mob_no")
private Long mobNo;

如果给出 10 位值,它不应该给出消息“手机号码长度应为 10 个字符”

Java Spring-Boot 验证

评论

0赞 Johannes Becker 11/9/2023
您应该考虑“接受”正确答案。

答:

0赞 Rafael Guillen 11/9/2023 #1

根据您的描述,您需要一个 而不是 a for .假设您有一个这样的电话号码: ,因为值为 。对 a 的验证应如下所示:StringLongmobNo0005550001Long550001String

@Size(min = 10, max = 10, message = "Mobile number length should be 10 characters.")
private String mobNo;

编辑: 一个好的、更全面的替代方法是根据匹配 10 位数字的正则表达式进行验证:

@Pattern(regexp = "^\d{10}$", message = "Mobile number length should be 10 characters.")
private String mobNo;

编辑: 在答案中添加注释

如果为 a,则无法将其更改为 ,请使用以下命令进行验证:mobNoLongString

@Min(1_000_000_000L)
@Max(9_999_999_999L)
Long mobNo

这是 Long 有 10 位数字的值范围。

但是,在选择“长”或“电话号码”字段之前,请考虑上面的示例:

前任:0_005_550_001

这是一个有效的电话号码,但作为 ITS 表示的 .Long550001

评论

0赞 Deepak Kumar 11/10/2023
private String mobNo;不在 String 中,而是在 Long 中
1赞 Johannes Becker 11/9/2023 #2

您有一个定义为 Long 的字段,这是一个数字。@min @max注释用于数值比较。所以实际上你说.这意味着 mobNo 必须等于 10。10 <= mobNo <= 10

解释你的消息,你真正想做的是,有一个十位数字的电话号码(这将是一个字符串,不长)。如果是 String,则可以使用 @Size(min,max) 注解。请参阅文档。