복붙노트

[SPRING] 상속 된 클래스의 봄 MVC 유효성 검사

SPRING

상속 된 클래스의 봄 MVC 유효성 검사

나는이 일을하고 싶어하는 유일한 사람이라고 믿지만 어려움을 겪었습니다. 그러나 장애물 위에 나를 도울 참조를 찾을 수 없습니다. Spring MVC와 주석 기반 유효성 검사 (프레임 워크 4.0과 Java 1.7 사용)를 사용하여 다음과 같이 간단한 클래스 계층 구조를 고려하십시오.

abstract class Foo {

    @Size(max=10, message = "The name has to be 10 characters or less.")
    private String name;

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

class Bar extends Foo {

}

class Bang extends Foo {

}

Bar 또는 Bang의 인스턴스에 10자를 초과하는 이름을 넣으면 예상되는 유효성 검사 오류가 발생합니다. 그래도 Bar와 Bang을 추상 기본 클래스 Foo에서 파생 시키려고한다고 가정 해 보겠습니다. 그러나 자식 클래스의 name 속성에 다른 유효성 검사가 필요합니다.

어떻게 Bar.name에 최대 길이가, 예를 들어 12 자, Bang.name에는 최대 길이가 8자가되도록 Bar와 Bang에 주석을 달아 주나요?

감사합니다, 롭

해결법

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

    1.간단히 말해, 수퍼 클래스에서 제약 조건을 해제하는 것은 Bean Validation에서 불가능합니다. @OverrideConstraint 또는 @IgnoreInheritedConstraint 유형의 어노테이션을 제안하는 기능 요청이 https://hibernate.atlassian.net/browse/BVAL-256에 있습니다. 현재로서는이 작업을 수행 할 수 없습니다.

    간단히 말해, 수퍼 클래스에서 제약 조건을 해제하는 것은 Bean Validation에서 불가능합니다. @OverrideConstraint 또는 @IgnoreInheritedConstraint 유형의 어노테이션을 제안하는 기능 요청이 https://hibernate.atlassian.net/browse/BVAL-256에 있습니다. 현재로서는이 작업을 수행 할 수 없습니다.

    http://lists.jboss.org/pipermail/beanvalidation-dev/2012-January/000128.html 및 https://hibernate.atlassian.net/browse/HV-548도 참조하십시오.

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

    2.파생 클래스에서 새 필드를 만들고 메서드를 재정의하십시오.

    파생 클래스에서 새 필드를 만들고 메서드를 재정의하십시오.

    class Bar extends Foo {
        @Size(max=12, message = "The name has to be 12 characters or less.")
        private String name;
    
        @Override
        public String getName() {
            return this.name;
        }
    
        @Override
        public void setName(String name) {
            this.name = name;
        }
    }
    
  3. ==============================

    3.@Size (max = 12, message = "이름은 12 자 이하 여야합니다.") 주석을 getter 메소드에도 넣을 수 있습니다.

    @Size (max = 12, message = "이름은 12 자 이하 여야합니다.") 주석을 getter 메소드에도 넣을 수 있습니다.

    따라서 이름 필드를 재정의하고 개인화 된 주석을 getter 메소드에 두십시오. 필드에 유효성 검사 주석을 넣는 것과 동일하게 작동합니다. 아래 예를 참조하십시오.

    class Bar extends Foo 
    {
        @Override 
        @Size(max=12, message = "The name has to be 12 characters or less.")
        public void getName(String name)
            {
                this.name = name;
            }
    }
    
  4. from https://stackoverflow.com/questions/21841202/spring-mvc-validation-of-inherited-classes by cc-by-sa and MIT license