【发布时间】:2013-05-24 08:22:23
【问题描述】:
我有一个特定的要求,即使它看起来很简单。
我有一个用户表单(给你一个简化版)。
public class Form{
@NotEmpty(message = "{empty}")
@Size(min = 3, max = 32, message = "{size}")
private String firstName;
@NotEmpty(message = "{empty}")
@Size(min = 3, max = 32, message = "{size}")
private String lastName;
}
我希望两个字段都独立验证,第一次出错时失败(然后只显示一条错误消息)。
例如,如果我发送 firstName="" 和 lastName="aa",我希望得到 firstName 的空消息和 lastName 的 size 消息。
但通过这样做,我会收到 2 条关于 firstName 的错误消息(大小和空)。
我发现的第一个替代方法是使用@groupsequences,但仍然无法独立验证字段。
所以我创建了一个新注释:
@Documented
@Constraint(validatedBy = {})
@Retention(RetentionPolicy.RUNTIME)
@NotEmpty(message = "{empty}", groups = Check.firstTry.class)
@Size(min = 5, max = 32, message = "{size}", groups = Check.secondTry.class)
@GroupSequence({ Check.firstTry.class, Check.secondTry.class, Name.class })
public @interface Name {
public abstract String message() default "{empty}";
public abstract Class<?>[] groups() default {};
public abstract Class<?>[] payload() default {};
}
但它仍然会验证每条消息。
如果我使用@ReportAsSingleViolation,它将始终返回默认消息。
我是不是遗漏了什么,对于这种情况,表单验证应该很容易,这不是一个奇怪的情况,是吗?
谢谢
【问题讨论】:
标签: java forms spring annotations validation