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 ) {
        // ...
    }
}

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>
참고

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>

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"/>

여기서 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());
    }
}

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

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.