Spring 유효성 검사를 사용할 때 기본 ConstraintValidator 메시지를 무시하는 데 문제가 있습니다.Spring MVC에서 ConstraintValidator 기본 메시지를 재정의 할 수 없습니다.
이NotNull=This field is mandatory
BankHoliday=You cannot select a bank holiday
BankHoliday에 대한 나의 주석이 다음과 같다 :
@Documented
@Constraint(validatedBy = BankHolidayValidator.class)
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface BankHoliday {
String message() default "{BankHoliday}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
내 검증은 다음과 같다 :
public class BankHolidayValidator implements ConstraintValidator<BankHoliday, Date> {
@Override
public void initialize(BankHoliday bankHoliday) { }
@Override
public boolean isValid(Date date, ConstraintValidatorContext cxt) {
if(date == null) {
cxt.disableDefaultConstraintViolation();
cxt.buildConstraintViolationWithTemplate("{NotNull}").addConstraintViolation();
return false;
} else if (isBankHoliday(date)) {
return false;
} else {
return true;
}
}
나는 다음과 같은 값을 포함하는 사용자 정의 messages.properties 파일이
}
내 모델은 @BankHoliday 주석과 주석이 : 사용자가이 필드를 채울하지 않는 경우
@RequestMapping(value="/new/request", method = RequestMethod.POST)
public String putNewRequest(@Valid @ModelAttribute("request") Request request, BindingResult bindingResult, Map<String, Object> map) {
if (bindingResult.hasErrors()) {
// return them back
} else {
// process the request
}
}
그러나, 그들은 표시되는 오류 메시지가 당신이 ": 같은
@BankHoliday
@DateTimeFormat(pattern = "dd/MM/yy")
private Date desiredBookingDate;
내 컨트롤러가 보인다 "이 필드는 필수 항목"대신 "은행 휴무일을 선택할 수 없습니다." 코드를 살펴보면 cxt.disableDefaultConstraintViolation() 줄이 확실히 호출되고 {NotNull} 제약 조건 유효성 검사가 추가되는 것을 볼 수 있지만 사용자는 항상 기본 메시지를 보게됩니다.
"{NotNull}"을 (를) "테스트 메시지"로 바꾸려고 시도했지만이 방법도 작동하지 않습니다. 왜 이것이 작동하지 않는지에 대해 올바른 방향으로 나를 가리킬 수 있습니까?
순수 Bean 유효성 검사를 사용하여 예제를 사용해 보셨습니까? 기본적으로 Validator 인스턴스를 만들고 서로 다른 메시지를 반환해야하는 두 개의 인스턴스를 확인합니다. 나는 기본적으로 문제가 Bean Validation (aka Hibernate Validator)에서 발생하는지 아니면 Spring 통합 (아마도 메시지는 캐시 된 것인가?)에서 발생하는지 궁금합니다. 즉, http://stackoverflow.com/a/25596487/115835에 동의합니다. 동적으로 메시지를 변경하는 대신 제약 조건 구성을 사용하는 것이 Bean Validation의 정신에서 더 중요합니다. http://goo.gl/pLg8Hi – Hardy
제약 조건을 살펴 보았습니다. 포인터에 대한 감사가 훨씬 적합합니다. –