47.3. 매개변수 변환기


47.3.1. 개요

매개 변수 변환기를 사용하면 모든 유형의 필드, 빈 속성 또는 리소스 메서드 인수에 매개변수( 문자열 유형)를 삽입할 수 있습니다. 적절한 매개 변수 변환기를 구현하고 바인딩하여 매개 변수 String 값을 대상 유형으로 변환할 수 있도록 JAX-RS 런타임을 확장할 수 있습니다.

47.3.2. 자동 변환

매개변수는 String 의 인스턴스로 수신되므로 항상 String 유형의 필드, 빈 속성 및 메서드 매개변수에 직접 삽입할 수 있습니다. 또한 JAX-RS 런타임에는 매개 변수 문자열을 다음 유형으로 자동 변환하는 기능이 있습니다.

  1. 기본 유형.
  2. 단일 String 인수를 수락하는 생성자가 있는 형식입니다.Types that have a constructor that accepts a single String argument.
  3. 형식의 인스턴스를 반환하는 단일 String 인수가 있는 valueOf 또는 fromString 이라는 정적 메서드가 있는 Type입니다.Types that have a static method named valueOf or fromString with a single String argument that returns an instance of the type.
  4. List<T > , Set<T > , 또는 SortedSet < T >, T 가 2 또는 3에 설명된 유형 중 하나인 경우.

47.3.3. 매개 변수 변환기

자동 변환에서 다루지 않는 형식에 매개 변수를 삽입하려면 해당 형식에 대한 사용자 지정 매개 변수 변환기를 정의할 수 있습니다.In order to inject a parameter into a type not covered by automatic conversion, you can define a custom parameter converter for the type. 매개 변수 변환기는 String에서 사용자 지정 형식으로 변환 정의 및 사용자 지정 형식에서 String으로의 변환을 정의할 수 있는 JAX-RS 확장입니다.A parameter converter is a JAX-RS extension that enables you to define conversion from String to a custom type, and also in the reverse direction, from the custom type to a String.

47.3.4. 팩토리 패턴

JAX-RS 매개 변수 변환기 메커니즘은 팩토리 패턴을 사용합니다. 따라서 매개 변수 변환기를 직접 등록하는 대신 요청 시 매개 변수 변환기(type, javax.ws.rs.ext.ParamConverterProvider)를 만드는 매개 변수 변환기(type, javax.ws.rs.ext.ParamConverter)를 생성해야 합니다.

47.3.5. ParamConverter 인터페이스

javax.ws.rs.ext.ParamConverter 인터페이스는 다음과 같이 정의됩니다.

Copy to Clipboard Toggle word wrap
// Java
package javax.ws.rs.ext;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import javax.ws.rs.DefaultValue;

public interface ParamConverter<T> {

    @Target({ElementType.TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public static @interface Lazy {}

    public T fromString(String value);

    public String toString(T value);
}

자체 ParamConverter 클래스를 구현하려면 fromString 메서드를 재정의하여 매개 변수 문자열을 대상 유형으로 변환하고 대상 유형을 문자열로 다시 변환 해야 합니다.

47.3.6. ParamConverterProvider 인터페이스

javax.ws.rs.ext.ParamConverterProvider 인터페이스는 다음과 같이 정의됩니다.

Copy to Clipboard Toggle word wrap
// Java
package javax.ws.rs.ext;

import java.lang.annotation.Annotation;
import java.lang.reflect.Type;

public interface ParamConverterProvider {
    public <T> ParamConverter<T> getConverter(Class<T> rawType, Type genericType, Annotation annotations[]);
}

자체 ParamConverterProvider 클래스를 구현하려면 이 인터페이스를 구현해야 합니다. 이 인터페이스는 ParamConverter 인스턴스를 생성하는 팩토리 메서드인 getConverter 메서드를 재정의해야 합니다.

47.3.7. 매개 변수 변환기 공급자 바인딩

매개 변수 변환기 공급자를 JAX-RS 런타임(애플리케이션에서 사용할 수 있도록 하는)에 바인딩 하려면 다음과 같이 구현 클래스에 @Provider 주석을 추가해야 합니다.

Copy to Clipboard Toggle word wrap
// Java
...
import javax.ws.rs.ext.ParamConverterProvider;
import javax.ws.rs.ext.Provider;

@Provider
public class TargetTypeProvider implements ParamConverterProvider {
    ...
}

이 주석은 배포 단계에서 매개변수 변환기 공급자가 자동으로 등록되도록 합니다.

47.3.8. 예제

다음 예제에서는 매개 변수 문자열을 TargetType 형식으로 변환 하거나 변환할 수 있는 기능이 있는 ParamConverter 및 ParamConverter를 구현하는 방법을 보여줍니다.

Copy to Clipboard Toggle word wrap
// Java
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;

import javax.ws.rs.ext.ParamConverter;
import javax.ws.rs.ext.ParamConverterProvider;
import javax.ws.rs.ext.Provider;

@Provider
public class TargetTypeProvider implements ParamConverterProvider {

    @Override
    public <T> ParamConverter<T> getConverter(
        Class<T> rawType,
        Type genericType,
        Annotation[] annotations
    ) {
        if (rawType.getName().equals(TargetType.class.getName())) {
            return new ParamConverter<T>() {

                @Override
                public T fromString(String value) {
                    // Perform conversion of value
                    // ...
                    TargetType convertedValue = // ... ;
                    return convertedValue;
                }

                @Override
                public String toString(T value) {
                    if (value == null) { return null; }
                    // Assuming that TargetType.toString is defined
                    return value.toString();
                }
            };
        }
        return null;
    }

}

47.3.9. 매개 변수 변환기 사용

이제 TargetType에 대한 매개변수 변환기를 정의했으므로 다음과 같이 TargetType 필드 및 인수에 직접 매개변수를 삽입할 수 있습니다.

Copy to Clipboard Toggle word wrap
// Java
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
...
@POST
public Response updatePost(@FormParam("target") TargetType target)
{
  ...
}

47.3.10. 기본값의 지연 변환

매개변수의 기본값( @DefaultValue 주석을 사용하여) 기본값을 지정하는 경우 기본값을 바로 대상 유형(기본 동작)으로 변환하거나 필요한 경우에만 기본값을 변환해야 하는지(lazy 변환)할지 여부를 선택할 수 있습니다. 지연 변환을 선택하려면 대상 유형에 @ParamConverter.Lazy 주석을 추가합니다. 예를 들면 다음과 같습니다.

Copy to Clipboard Toggle word wrap
// Java
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.ext.ParamConverter.Lazy;
...
@POST
public Response updatePost(
    @FormParam("target")
    @DefaultValue("default val")
    @ParamConverter.Lazy
    TargetType target)
{
  ...
}
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2025 Red Hat, Inc.