Hed*_*ess 22 java validation bean-validation
假设我有以下简单的java bean:
class MyBean {
private Date startDate;
private Date endDate;
//setter, getters etc...
}
Run Code Online (Sandbox Code Playgroud)
JSR 303中是否有一种机制来创建一个自定义验证器来验证startDate必须在endDate之前的约束?
在我看来,它是一个常见的用例,但我找不到这种多属性关系约束的任何例子.
McD*_*ell 30
我可以想到一些事情要尝试.
您可以Constraint使用适当的验证器创建具有该类型的目标的目标:
@ValidateDateRange(start="startDate", end="endDate")
public class MyBean {
Run Code Online (Sandbox Code Playgroud)
您可以在类型中封装日期范围并验证:
public class DateRange {
private long start;
private long end;
public void setStart(Date start) {
this.start = start.getTime();
}
// etc.
Run Code Online (Sandbox Code Playgroud)
您可以添加一个执行检查的简单属性:
public class MyBean {
private Date startDate;
private Date endDate;
@AssertTrue public boolean isValidRange() {
// TODO: null checks
return endDate.compareTo(startDate) >= 0;
}
Run Code Online (Sandbox Code Playgroud)
Gun*_*nar 14
如果您在4.1或更高版本中使用Hibernate Validator,则可以将@ScriptAssert约束与脚本或表达式语言一起使用来表达此类约束.使用JavaScript,您的示例如下所示:
@ScriptAssert(lang = "javascript", script = "_this.startDate.before(_this.endDate)")
public class CalendarEvent {
private Date startDate;
private Date endDate;
//...
}
Run Code Online (Sandbox Code Playgroud)
通过为您选择的脚本语言创建自定义约束,您可以获得更紧凑的语法:
@JexlAssert("_.startDate < _.endDate")
public class CalendarEvent {
private Date startDate;
private Date endDate;
//...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13686 次 |
| 最近记录: |