如何用Javax Validation注解限制User类percent字段仅允许指定值?
使用Javax Validation现有注解校验Integer字段的离散值
如果不想自定义校验器,你可以用Javax Validation自带的**@AssertTrue**注解,配合类内的校验方法来实现需求,全程不用额外写自定义约束或校验器。
修改后的User类代码如下:
import javax.validation.constraints.AssertTrue; class User { private String name; private Integer percent; @AssertTrue(message = "percent只能是10、50、80、100中的一个") public boolean isPercentValid() { // 允许percent为null的情况,若不允许则去掉`percent == null ||` return percent == null || java.util.Arrays.asList(10, 50, 80, 100).contains(percent); } }
说明
- @AssertTrue会校验标注的方法返回值是否为true,方法名要符合JavaBean规范(比如这里用
isXXX格式) - 方法里的逻辑很直接:要么percent是null(如果业务允许的话),要么属于指定的四个有效值之一
- 可以通过
message属性自定义校验失败时的提示文本
如果你的业务要求percent字段不允许为null,只需再加上**@NotNull**注解即可:
import javax.validation.constraints.AssertTrue; import javax.validation.constraints.NotNull; class User { private String name; @NotNull(message = "percent不能为空") private Integer percent; @AssertTrue(message = "percent只能是10、50、80、100中的一个") public boolean isPercentValid() { return java.util.Arrays.asList(10, 50, 80, 100).contains(percent); } }
这种方式完全基于Javax Validation的标准注解实现,不需要额外自定义组件,刚好满足你的需求。
内容的提问来源于stack exchange,提问作者Shubham Palkar
相关产品推荐
相关产品推荐

