[SPRING] HibernateValidator를 사용하여 크로스 필드 유효성 검사가 오류 메시지를 표시하지 않습니다.
SPRINGHibernateValidator를 사용하여 크로스 필드 유효성 검사가 오류 메시지를 표시하지 않습니다.
이 답변에 지정된대로 HibernateValidator를 사용하여 폼의 두 필드 "password"와 "confirmPassword"의 유효성을 검증합니다. 다음은 제약 디스크립터 (validator interface)이다.
package constraintdescriptor;
import constraintvalidator.FieldMatchValidator;
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.TYPE;
import java.lang.annotation.Retention;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.Target;
@Target({TYPE, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = FieldMatchValidator.class)
@Documented
public @interface FieldMatch
{
String message() default "{constraintdescriptor.fieldmatch}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
/**
* @return The first field
*/
String first();
/**
* @return The second field
*/
String second();
/**
* Defines several <code>@FieldMatch</code> annotations on the same element
*
* @see FieldMatch
*/
@Target({TYPE, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Documented
public @interface List{
FieldMatch[] value();
}
}
다음은 제약 조건 검사기 (구현 클래스)입니다.
package constraintvalidator;
import constraintdescriptor.FieldMatch;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import org.apache.commons.beanutils.BeanUtils;
public final class FieldMatchValidator implements ConstraintValidator<FieldMatch, Object>
{
private String firstFieldName;
private String secondFieldName;
public void initialize(final FieldMatch constraintAnnotation) {
firstFieldName = constraintAnnotation.first();
secondFieldName = constraintAnnotation.second();
//System.out.println("firstFieldName = "+firstFieldName+" secondFieldName = "+secondFieldName);
}
public boolean isValid(final Object value, final ConstraintValidatorContext cvc) {
try {
final Object firstObj = BeanUtils.getProperty(value, firstFieldName );
final Object secondObj = BeanUtils.getProperty(value, secondFieldName );
//System.out.println("firstObj = "+firstObj+" secondObj = "+secondObj);
return firstObj == null && secondObj == null || firstObj != null && firstObj.equals(secondObj);
}
catch (final Exception e) {
System.out.println(e.toString());
}
return true;
}
}
다음은
'SPRING' 카테고리의 다른 글
[SPRING] WebMvcConfigurationSupport를 확장하고 WebMvcAutoConfiguration을 사용할 수 있습니까? (0) | 2019.01.12 |
---|---|
[SPRING] spring-data-mongo - 선택적 쿼리 매개 변수? (0) | 2019.01.12 |
[SPRING] 필수 스프링에서 동일한 유형의 여러 빈 (0) | 2019.01.12 |
[SPRING] ClassCastException : List <MymodelClass> 대신 List <LinkedHashMap>를 반환하는 RestTemplate (0) | 2019.01.12 |
[SPRING] logback.xml에 Spring 속성 자리 표시자를 사용할 수 없습니다. (0) | 2019.01.12 |