65장. 빈 유효성 검사


초록

빈 유효성 검사는 서비스 클래스 또는 인터페이스에 Java 주석을 추가하여 런타임 제약 조건을 정의할 수 있는 Java 표준입니다. Apache CXF는 인터셉터를 사용하여 이 기능을 웹 서비스 메서드 호출과 통합합니다.

65.1. 소개

65.1.1. 개요

빈 유효성 검사 1.1(JSR-349) - 원래 빈 유효성 검사 1.0(JSR-303) 표준으로 발전된 경우 Java 주석을 사용하여 런타임 시 확인할 수 있는 제약 조건을 선언할 수 있습니다. 주석을 사용하여 Java 코드의 다음 부분에서 제약 조건을 정의할 수 있습니다.

  • 빈 클래스의 필드입니다.
  • 메서드 및 생성자 매개 변수.
  • 메서드 반환 값.

65.1.2. 주석이 달린 클래스의 예

다음 예제에서는 몇 가지 표준 빈 유효성 검사 제약 조건이 추가된 Java 클래스를 보여줍니다.

// Java
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Max;
import javax.validation.Valid;
...
public class Person {
    @NotNull private String firstName;
    @NotNull private String lastName;
    @Valid @NotNull private Person boss;

    public @NotNull String saveItem( @Valid @NotNull Person person, @Max( 23 ) BigDecimal age ) {
        // ...
    }
}
Copy to Clipboard Toggle word wrap

65.1.3. 빈 유효성 검사 또는 스키마 검증?

일부 면에서 빈 검증 및 스키마 검증은 매우 유사합니다. XML 스키마를 사용하여 끝점을 구성하는 것은 웹 서비스 끝점에서 런타임에 메시지를 확인하는 잘 설정된 방법입니다. XML 스키마는 들어오고 나가는 메시지에 대한 빈 유효성 검사와 동일한 제한 조건의 대부분을 확인할 수 있습니다. 그러나 빈 검증은 다음 이유 중 하나 이상에 유용한 대체가 될 수 있습니다.

  • 빈 유효성 검사를 사용하면 XML 스키마와 독립적으로 제약 조건을 정의할 수 있습니다(예: 코드 우선 서비스 개발의 경우).
  • 현재 XML 스키마가 너무 느릴 경우 빈 유효성 검사를 사용하여 엄격한 제약 조건을 정의할 수 있습니다.
  • 빈 유효성 검사를 사용하면 XML 스키마 언어를 사용하여 정의할 수 없는 사용자 지정 제약 조건을 정의할 수 있습니다.

65.1.4. 종속 항목

Bean Validation 1.1(JSR-349) 표준에서는 구현이 아닌 API만 정의합니다. 따라서 종속성은 다음 두 부분으로 제공되어야 합니다.

  • 핵심 종속 항목- 빈 검증 1.1 API, Java 통합 표현식 언어 API 및 구현을 제공합니다.
  • Hibernate Validator 종속성- 빈 검증 1.1 구현을 제공합니다.

65.1.5. 핵심 종속 항목

빈 유효성 검사를 사용하려면 프로젝트의 Maven pom.xml 파일에 다음 코어 종속 항목을 추가해야 합니다.

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>
<dependency>
    <groupId>javax.el</groupId>
    <artifactId>javax.el-api</artifactId>
    <!-- use 3.0-b02 version for Java 6 -->
    <version>3.0.0</version>
</dependency>
<dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.el</artifactId>
    <!-- use 3.0-b01 version for Java 6 -->
    <version>3.0.0</version>
</dependency>
Copy to Clipboard Toggle word wrap
참고

javax.el/javax.el-apiorg.glassfish/javax.el 종속성은 Java 통합 표현식 언어의 API 및 구현을 제공합니다. 이 표현식 언어는 빈 유효성 검사를 통해 내부적으로 사용되지만 애플리케이션 프로그래밍 수준에서는 중요하지 않습니다.

65.1.6. Hibernate Validator 종속 항목

빈 유효성 검사의 Hibernate Validator 구현을 사용하려면 프로젝트의 Maven pom.xml 파일에 다음과 같은 추가 종속 항목을 추가해야 합니다.

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.0.3.Final</version>
</dependency>
Copy to Clipboard Toggle word wrap

65.1.7. OSGi 환경에서 검증 공급자 해결

유효성 검사 공급자를 확인하는 기본 메커니즘에는 classpath를 검사하여 공급자 리소스를 찾아야 합니다. 그러나 OSGi(Apache Karaf) 환경의 경우 검증 공급자(예: Hibernate validator)가 별도의 번들에 패키지되어 애플리케이션 classpath에서 자동으로 사용할 수 없기 때문에 이 메커니즘이 작동하지 않습니다. OSGi의 컨텍스트에서 Hibernate 유효성 검증기를 애플리케이션 번들에 연결해야 하며, OSGi는 이를 성공적으로 수행하는 데 약간의 도움이 필요합니다.

65.1.8. OSGi에서 명시적으로 검증 공급자 구성

OSGi의 컨텍스트에서 자동 검색을 사용하지 않고 유효성 검사 공급자를 명시적으로 구성해야 합니다. 예를 들어 빈 유효성 검사를 활성화하기 위해 공통 검증 기능을 사용하는 경우 다음과 같이 검증 공급자를 사용하여 구성해야 합니다. “빈 유효성 검사 기능”

<bean id="commonValidationFeature" class="org.apache.cxf.validation.BeanValidationFeature">
    <property name="provider" ref="beanValidationProvider"/>
</bean>

<bean id="beanValidationProvider" class="org.apache.cxf.validation.BeanValidationProvider">
    <constructor-arg ref="validationProviderResolver"/>
</bean>

<bean id="validationProviderResolver" class="org.example.HibernateValidationProviderResolver"/>
Copy to Clipboard Toggle word wrap

여기서 HibernateValidationProviderResolver 는 Hibernate 검증 공급자를 래핑하는 사용자 정의 클래스입니다.

65.1.9. HibernateValidationProviderResolver 클래스의 예

다음 코드 예제에서는 Hibernate 유효성 검증기를 확인하는 사용자 지정 HibernateValidationProviderResolver 를 정의하는 방법을 보여줍니다.

// Java
package org.example;

import static java.util.Collections.singletonList;
import org.hibernate.validator.HibernateValidator;
import javax.validation.ValidationProviderResolver;
import java.util.List;

/**
 * OSGi-friendly implementation of {@code javax.validation.ValidationProviderResolver} returning
 * {@code org.hibernate.validator.HibernateValidator} instance.
 *
 */
public class HibernateValidationProviderResolver implements ValidationProviderResolver {

    @Override
    public List getValidationProviders() {
        return singletonList(new HibernateValidator());
    }
}
Copy to Clipboard Toggle word wrap

Maven 번들 플러그인을 사용하도록 구성된 Maven 빌드 시스템에서 이전 클래스를 빌드할 때 배포 시 애플리케이션이 Hibernate 검증기 번들에 연결됩니다(이미 Hibernate 유효성 검사기 번들을 이미 배포한 것으로 가정).

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat