유효성 검사에 실패한 필드는 어떻게 구할 수 있습니까?
유효성 검사에 실패한 입력란은 MethodConstraintViolationException
으로 반환됩니다. getConstraintViolations()
을 호출하여 개별 위반을 검색 한 다음 getPropertyPath()
으로 필드를 검색하고 노드를 탐색 할 수 있습니다.
그러나 응답에서 반환 된 필드 이름이 빈의 속성 이름과 일치하지 않는 경우가 있습니다 (예 : 뱀 사례 응답 (예 : user_name
)을 반환하는 경우).하지만 bean 속성 이름 username
인 경우 좀 더 창의적이어야합니다.
이 시나리오에서는 bean 유효성 검사 주석에 Payload
으로 필드 이름을 저장할 수 있습니다.
응답 분야 :
@JsonProperty("user_name")
@NotEmpty(message = ErrorMessageKeys.USERNAME_REQUIRED,
payload = {FieldNamePayload.UserName.class})
private String username;
페이로드 등급 :
public class FieldNamePayload
{
/**
* Represents the field name "user_name"
*/
public static class UserName implements ValuePayload
{
private static final String value = "user_name";
@Override
public String getValue()
{
return value;
}
}
}
당신의 예외 매퍼의 페이로드 가져 :
List<MethodConstraintViolation<?>> violations = new ArrayList<MethodConstraintViolation<?>>(exception.getConstraintViolations());
for(MethodConstraintViolation<?> violation : violations)
{
String field = getFieldName(violation);
String message = violation.getMessage();
for(Class<? extends Payload> payload : new ArrayList<Class<? extends Payload>>(violation.getConstraintDescriptor().getPayload()))
{
//Retrieve field name from constraint payload
if(payload.isAssignableFrom(FieldNamePayload.UserName.class))
{
field = getPayloadValue(payload);
}
}
//Create an error response here!
}
어떻게 관련 메시지를 가져 옵니까?
는 기본적으로 콩 검증 프레임 워크는 다음과 같은 명명 규칙과 클래스 패스의 루트에 현지화 된 파일의 메시지를 조회 : 기본 로케일
ValidationMessages.properties
. 현지화가
당신이 최대 절전 모드의 검증 공급자를 사용하고 ResourceBundleMessageInterpolator
에 추가 할 사용자 정의 ResourceBundleLocator
을 구현할 수에서이 동작을 무시하고 확인 메시지가 검색되는 위치를 변경하려면을 필요
ValidationMessages_{locale}.properties
. ValidatorFactory validatorFactory = Validation
.byProvider(HibernateValidator.class)
.configure()
.messageInterpolator(
new ResourceBundleMessageInterpolator(
new MyCustomResourceBundleLocator()))
.buildValidatorFactory();
메시지를 덮어 쓰지 않고 기본 유효성 검사 메시지를 받고 싶습니까? –
기본 메시지는 MessageConstraintViolation 오브젝트에 있습니다. getMessage() 메소드를 호출하십시오. 위의 예외 매퍼 코드를 살펴보십시오. – gregwhitaker
설명해 주셔서 감사합니다. –