Jav*_*per 4 java spring hibernate-validator spring-validator
在我的Spring应用程序中,我Hibernate Validator用于验证目的.
当我做简单的验证时@NotEmpty,@Email...我很容易工作
但是当来到Date字段时,给出问题......
问题是在我的Jsp页面中我得到的值类型为String然后我将String转换为Date ..
听到是我的榜样......
@NotEmpty(message = "Write Some Description")
private String description;
private String fromDateMonth;
private String fromDateYear;
private String toDateMonth;
private String toDateYear;
Run Code Online (Sandbox Code Playgroud)
我正在转换这fromDateMonth和fromDateYear成这是我的控制器类Date.
那么他们在Controller类中添加Validator Annotation的任何可能性是什么?
其他明智的我应该听到什么?给我建议......
如果要在toDate之前验证fromDate,则可以编写自定义验证器来执行此多字段验证.您编写了一个自定义验证器,并且还定义了一个自定义注释,该注释放置在要验证的bean上.
有关更多信息,请参阅以下答案.
根据问题显示的次数,我得出结论,很多人仍然会在这里寻找日期范围的验证器。
假设我们有一个 DTO,其中包含另一个 DTO(或带有@Embeddable注释的类),其中有两个字段LocalDate(或其他日期表示形式,这只是示例)。
class MyDto {
@ValidDateRange // <-- target annotation
private DateRange dateRange;
// getters, setters, etc.
}
Run Code Online (Sandbox Code Playgroud)
class DateRange {
private LocalDate startOfRange;
private LocalDate endOfRange;
// getters, setters, etc.
}
Run Code Online (Sandbox Code Playgroud)
现在,我们可以声明我们自己的@ValidDateRange注释:
@Documented
@Constraint(validatedBy = DateRangeValidator.class)
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@interface ValidDateRange {
String message() default "Start date must be before end date";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
Run Code Online (Sandbox Code Playgroud)
编写验证器本身也可以归结为几行代码:
class DateRangeValidator implements ConstraintValidator<ValidDateRange, DateRange> {
@Override
public boolean isValid(DateRange value, ConstraintValidatorContext context) {
return value.getStartOfRange().isBefore(value.getEndOfRange());
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17532 次 |
| 最近记录: |