使用@javax.validation.constraints.Digits检查BigDecimal是否仅具有精度后2位数字。

19

我有一个以下的类。

Class Item {

   private BigDecimal amount;

   ....
}

我该如何验证金额,确保它只包含小数点后两位,例如:

2.19 是正确的

2.292 是不正确的

可以使用注释 @javax.validation.constraints.Digits。另外,如何展示自定义错误信息?

谢谢 :)


为什么不只调用 setScale() 并传递非负值,并依赖于文档记录的行为 - user207421
2个回答

23

Item 类中的 amount 字段进行如下注释

class Item {

   @Digits(integer = 6, fraction = 2, message = "{javax.validation.constraints.Digits.message}")
   private BigDecimal amount;
}
在上面的类中,integerfraction是必填参数,而@Digit中的消息是可选参数,我们可以在那里配置自定义错误消息。
现在,我们在源目录中创建一个名为ValidationMessages.properties的属性文件。它将看起来像这样...
javax.validation.constraints.Digits.message = "custom error message will be here"

当我使用整数=14和小数=4时,尝试使用数字50000000000000.11111进行验证时无法工作,有任何想法为什么? - Eragonz91
1
@Eragonz91 不要忘记在你的请求体对象上添加 @Valid 注解。 - kucinghitam

7
尝试对@Digits设置限制约束:
@Digits(integer = 6, fraction = 2)
public String getAmount() {
   return amount;
}

谢谢您的回答。我想知道,如何为此抛出异常? - Prashant Shilimkar
你在这里期望什么样的异常?你可以添加@NotNull作为约束条件,以便该方法不返回null... - Arash Saidi
想要抛出异常并带有消息,例如精度后超过2位不允许,以便让用户知道错误。这里是否可能? - Prashant Shilimkar
1
@PrashantShilimkar 我其实不知道你该如何做, 但你可以可能创建自己的异常来检查是否有超过两位小数然后抛出异常。 - Arash Saidi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接