我编写了一个自定义约束@Year
,称为检查 a 是否Date
在某一年发生。
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD, ElementType.ANNOTATION_TYPE })
@Constraint(validatedBy = YearCheck.class)
public @interface Year {
String message() default "{year.message}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
/**
* The lower year. If not specified then no upper boundary check is performed.<br>
* Special values are:
* <ul>
* <li>{@link TimeUtil#NOW} for the current year
* </ul>
*/
String min() default "";
/**
* The upper year. If not specified then no upper boundary check is performed.<br>
* Special values are:
* <ul>
* <li>{@link TimeUtil#NOW} for the current year
* </ul>
*/
String max() default "";
}
其中ValidationMessages.properties
包含以下内容:
year.message = must be a year between {min} and {max}
如您所见,min
andmax
是字符串,因为TimeUtil.NOW
(包含 的常量"now"
)表示以当前年份进行比较。
另外,如果不指定min
or max
,则表示对应的值为无穷大
所以,问题是,例如min
:如何检查是否min
已设置,如果不是数字(""
或"now"
)我如何设置一个值,然后将其插入到消息中?
例如@Year(min=1900,max=TimeUtil.NOW)
应该生成消息
must be a year between 1900 and 2013
我已经阅读了有关 stackoverflow 的一些答案,阅读了文档,但我不确定 a) 是否有可能,并且 b) 我需要在约束实现或自定义MessageInterpolator
.