복붙노트

[SPRING] 속성 파일에서 얻은 오류 메시지와 함께 Spring에서 주석 유효성 검사를 사용하는 방법?

SPRING

속성 파일에서 얻은 오류 메시지와 함께 Spring에서 주석 유효성 검사를 사용하는 방법?

나는 봄의 초보자이다.

내 도메인 클래스에서 유효성 검사를 다음과 같이 설정했습니다.

public class Worker {

    @NotNull(message="Name must be input")
    @Size(min=1,max=50, message="Name must not exceed 50 characters")
    private String name;
...

}

jsp 파일은 다음과 같습니다.

<form:input path="code" readonly="false" />
<font color="red"><form:errors path="code" />

그리고 컨트롤러 코드 :

@RequestMapping(value="/test",method=RequestMethod.POST)
    public void form(@Valid Worker worker, BindingResult result) {

        if (result.hasErrors()) {
            return;
        }
...

그것은 작동하지만 어떻게 "이름은 50자를 초과해서는 안됩니다"를 worker.name.overflow와 같은 텍스트로 교체 할 수 있습니까? BindingResult에 messageResolver를 추가해야합니까?

모든 검색 결과는 사용자 정의 Validator 클래스를 작성하는 것에 대해 말하는 것처럼 보이지만 지금은 주석을 사용하고 싶습니다. 나는이 질문에 누군가가 그렇게했기 때문에 방법이 있다는 것을 확신한다.

해결법

  1. ==============================

    1.hibernate validator에게 코드에 대한 조회를하기 위해 중괄호 안에 메시지의 값을 넣는다. @NotNull (message = "{worker.name.NotNull}") 그런 다음 클래스 경로의 루트에 ValidationMessages.properties에 번역을 넣습니다 (/ WEB-INF / classes, Maven의 resources 폴더 등).

    hibernate validator에게 코드에 대한 조회를하기 위해 중괄호 안에 메시지의 값을 넣는다. @NotNull (message = "{worker.name.NotNull}") 그런 다음 클래스 경로의 루트에 ValidationMessages.properties에 번역을 넣습니다 (/ WEB-INF / classes, Maven의 resources 폴더 등).

    유효성 검사기 구현은 자체적으로 이들을 독립적으로 조회하고 BindingResult를 기본 메시지로 변환합니다. 봄 메시지 소스 외부에서 발생합니다. 이론적으로 LocalValidatorFactory 빈을 오버라이드하여 유효성 검사기의 메시지 출력을 코드로 Errors 객체에 넣은 다음 Hibernate Validator가 통과하도록 주석에 중괄호를 남겨 둘 수 있습니다. JSR-303 ConstraintViolations를 스프링 오류로 바꾸는 소스 코드는 읽기 쉽고 확장하기에 충분합니다. 주석의 이름을 코드로, 주석 속성을 args로, 그리고 유효성 검사기의 변환을 기본 메시지로 둡니다.

    그것을 여기에서 볼 수있다 : https://src.springframework.org/svn/spring-framework/trunk/org.springframework.context/src/main/java/org/springframework/validation/beanvalidation/SpringValidatorAdapter.java

    댓글에서 질문 편집 :

    javax.validation.MessageInterpolator를 javax.validation.Configuration에 추가하여 다른 특성 파일에서 메시지를 찾도록 지시 할 수 있습니다. Spring LocalValidatorFactory 빈을 사용한다면 setMessageInterpolator를 사용하여 빈을 삽입 할 수 있습니다.

    최대 절전 모드의 경우 공급자 구현은 다음과 같습니다. http://docs.jboss.org/hibernate/validator/4.1/api/org/hibernate/validator/messageinterpolation/ResourceBundleMessageInterpolator.html

  2. ==============================

    2.이것은 문제에 대한 약간의 설명입니다.

    이것은 문제에 대한 약간의 설명입니다.

    @Size(min = 1, max = 50, message = "Email size should be between 1 and 50")
    

    이제 유효성 검사 태그에서 {message = "이메일 크기가 1 ~ 50"}이 (가) 제거됩니다.

    이렇게하면 특수 효과가 이렇게 생깁니다.

    @Size(min = 1, max = 50)
    

    이제 제어기 측에서 양식을 제출할 때 호출되는 메소드를 디버그하십시오. 다음은 사용자가 제출을 명중 할 때 요청을받는 내 방법입니다.

    public static ModelAndView processCustomerLoginRequest(IUserService userService, LoginForm loginForm, 
        HttpServletRequest request, HttpSession session, BindingResult result, String viewType, Map<String, LoginForm> model)
    

    이제 메서드의 첫 번째 줄에 디버그 지점을 배치하고 "result"인수를 디버깅합니다.

    BindingResult result
    

    디버깅하는 동안 코드 배열에서 이와 같은 문자열을 찾을 수 있습니다.

    Size.loginForm.loginId
    

    이제이 문자열을 속성 파일에 정의하고 해당 문자열에 대한 메시지를 정의하십시오. 컴파일하고 실행하십시오. 그 주석은 유효성이 검증되지 않을 때마다 표시 될 것입니다.

    Size.loginForm.loginId=email shouldn't be empty.
    

    기본적으로 스프링은 속성 파일 메시지의 키로 자체 문자열을 만듭니다. 위의 키

    Size(@Size) = validation annotation name
    loginForm = My Class Name
    loginId = Property name in LoginForm class.
    
  3. from https://stackoverflow.com/questions/5786582/how-to-use-annotation-validation-in-spring-with-error-message-gotten-from-proper by cc-by-sa and MIT license