@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
とmax
は文字列です。これは、TimeUtil.NOW
(定数を含む"now"
) が現在の年が比較に使用されることを意味するためです。
また、min
ormax
が指定されていない場合は、対応する値が無限大であることを意味します
したがって、たとえば、問題は次のとおりです。が設定されているmin
かどうかを確認するにはどうすればよいですか。数値でない場合 ( または のいずれか)、メッセージに挿入される値を設定するにはどうすればよいですか?min
""
"now"
たとえば@Year(min=1900,max=TimeUtil.NOW)
、メッセージを生成する必要があります
must be a year between 1900 and 2013
stackoverflow に関するいくつかの回答を読み、ドキュメントを読みましたが、a) それが可能であり、b) 制約の実装またはカスタムでこれを行う必要があるかどうかはわかりませんMessageInterpolator
。