[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.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.이것은 문제에 대한 약간의 설명입니다.
이것은 문제에 대한 약간의 설명입니다.
@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.
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