2016-06-08 5 views
0

봄 나는 org.springframework.validation.Validator 인터페이스를 사용자 정의 유효성 검사기의 소수를 만든 1.3.5봄 정의 검증 국제화

. 지역화 된 오류 메시지를 사용하려고합니다. 나는 다음과 같은 한 내 application.yml에서

@Component 
public class RegionValidator implements Validator { 

    @Autowired 
    RegionService regionService; 

    @Autowired 
    private MessageSource messageSource; 

    @Override 
    public boolean supports(Class<?> clazz) { 
     return Region.class.isAssignableFrom(clazz); 
    } 

    @Override 
    public void validate(Object target, Errors errors) { 
     String message = messageSource.getMessage("region.name.unique", null, null); 
     errors.rejectValue("name", "region.name.unique", "Name must be unique"); 
    } 
} 

: 발리의 코드에서

spring: 
    messages: 
     basename: i18n/messages 
     cache-seconds: -1 
     encoding: UTF-8 

, 내가 어떻게 messageSource 수 있지만 함께 올바른 메시지를 받고 있습니다 테스트 검증, 나는 다음있어 주어진 코드를 기반으로 메시지를 찾으려면 errors.rejectValue이 필요합니까?

답변

1

이 방법이 100 % 확실하지는 않지만 원본 질문에서 오류 메시지를 처리하는 @ControllerAdvice 클래스가 있음을 언급하지 못했습니다. 나는 ... 항상 기본 메시지보다는 지역화 된 메시지를 얻을 것

fieldErrorResource.setMessage(fieldError.getDefaultMessage());

을이 일을 한 것으로 나타났습니다. 그래서 나는 다음과 같이해야만했다.

if (fieldError.getCode() != null) { 
    fieldErrorResource.setMessage(messageSource.getMessage(fieldError.getCode(), null, null)); 
} else { 
    fieldErrorResource.setMessage(fieldError.getDefaultMessage()); 
} 

나는 이제 내가 기대하는 것을 얻고있다.