[SPRING] 봄 검증 사용자 정의 메시지 - 필드 이름
SPRING봄 검증 사용자 정의 메시지 - 필드 이름
문제 : Spring에서 유효성 검사 메시지에서 필드 이름을 얻는 방법
ValidationMessages.properties 파일에서 필드 이름에 액세스 할 수있는 방법이 있습니까? 예를 들어 아래에서 {0}을 사용해 보았지만 작동하지 않습니다. 어딘가에 보았습니다. Spring이 동적으로 필드 이름을 넣기를 원하므로 모든 클래스에 대해 반복 할 필요가 없습니다.
public class RegistrationForm {
@NotEmpty(message = "{NotEmpty}")
private String email;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
ValidationMessages.properties
NotEmpty={0} TEST
해결법
-
==============================
1.ValidationMessages.properties 대신 Spring 메시지 번들 (예 : message.properties)을 사용하여 메시지를 현지화하는 경우 가능합니다.
ValidationMessages.properties 대신 Spring 메시지 번들 (예 : message.properties)을 사용하여 메시지를 현지화하는 경우 가능합니다.
예제를 사용하여 Spring은 (첫 번째 단계에서) messages.properties에서 다음 메시지 키 (또는 코드)를 사용하여 필드 이름을 지역화하려고 시도합니다.
[RegistrationForm.email,email]
아무것도 발견되지 않으면 필드 이름으로 돌아갑니다.
그런 다음 Spring은 다음 키를 사용하여 지역화 된 오류 메시지를 찾습니다.
[NotEmpty.RegistrationForm.email,NotEmpty.email,NotEmpty.java.lang.String,NotEmpty]
여기서 NotEmpty는 java.lang.String, NotEmpty보다 우선 순위가 높으므로 필드 유형에 따라 메시지를 사용자 정의하려면 속지 마십시오.
따라서 messages.properties에 다음 내용을 넣으면 원하는 동작을 얻을 수 있습니다.
# for the localized field name (or just email as the key) RegistrationForm.email=Registration Email Address # for the localized error message (or use another specific message key) NotEmpty={0} must not be empty!
SpringValidatorAdapter # javadoc에서 getArgumentsForConstraint () :
ValidationMessages.properties를 사용하는 동안 @Size 주석의 max 속성을 참조하려면 {max}를 사용하고 {1}을 사용하는 Spring 메시지 묶음을 사용합니다 (알파벳은 알파벳순으로 정렬 할 때 @Size의 첫 번째 속성이기 때문에).
자세한 내용은 필자의 기능 요청을 참조하여 현지 이름 현지화를 쉽게 할 수 있습니다.
불행히도 코드를 밟아서 (지금이 포스트!).
오류 필드를 지역화하는 데 사용되는 키를 찾으려면 BindingResult 값을 검사하십시오. 예를 들어,이 오류가 발생합니다.
Field error in object 'RegistrationForm' on field 'email': rejected value []; codes [NotEmpty.RegistrationForm.email,NotEmpty.email,NotEmpty.java.lang.String,NotEmpty]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [RegistrationForm.email,email]; arguments []; default message [email]]; default message [may not be empty]
SpringValidatorAdapter # getArgumentsForConstraint ()는 유효성 검사 주석 속성 값과 오류 메시지에 사용할 수있는 필드 이름을 작성합니다.
-
==============================
2.Bean Validation 1.1 (JSR-349)에서는, 실제의 프로퍼티 필드의 이름으로 제약 메세지 보간을 제공하는 공개 API는 존재하지 않습니다. 그러한 기능이 존재한다면 노출 된 속성 전자 메일을 특히 다국어 기반 응용 프로그램에서 의미있는 표시로 변환하기 위해 보간 단계가 필요합니다.
Bean Validation 1.1 (JSR-349)에서는, 실제의 프로퍼티 필드의 이름으로 제약 메세지 보간을 제공하는 공개 API는 존재하지 않습니다. 그러한 기능이 존재한다면 노출 된 속성 전자 메일을 특히 다국어 기반 응용 프로그램에서 의미있는 표시로 변환하기 위해 보간 단계가 필요합니다.
현재 가장 가까운 것은 @NotEmpty 주석을 확장하고 원하는 속성의 이름을 전달할 수있는 속성을 속성에 추가하는 것입니다.
public class RegistrationForm { @NotEmpty(label = "Email Address") private String email; }
리소스 번들에서 메시지에 {label} 자리 표시자를 사용하여 제약 조건의 속성을 나타낼 수 있습니다.
물론 이것은 위에서 언급 한 다국어 유스 케이스에는 도움이되지 않지만 적어도 firstName으로 정의했을 수있는 필드의 이름과 같은 레이블을 정의 할 수있는 기능을 제공합니다.
from https://stackoverflow.com/questions/34249937/spring-validation-custom-messages-field-name by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 부트 메이븐 플러그인 - BOOT-INF 디렉토리 없음 (0) | 2019.01.24 |
---|---|
[SPRING] Spring MVC에서 Robots.txt에 액세스 할 수 없습니다. (0) | 2019.01.24 |
[SPRING] Ajax 요청을 사용하여 스프링 컨트롤러에서 뷰를 반환하는 방법은 무엇입니까? (0) | 2019.01.24 |
[SPRING] 읽기 전용 모드에서는 쓰기 작업이 허용되지 않습니다. - 지속되는 동안 문제가 발생합니다. (0) | 2019.01.24 |
[SPRING] SpringMVC 사용자 정의 컬렉션 편집기가 Jsp로 데이터를 반환하지 않음 (0) | 2019.01.24 |