검색

47.3. 매개변수입니다.

download PDF

47.3.1. 개요

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

47.3.2. 자동 변환

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

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

47.3.3. 매개변수 변환기

자동 변환이 적용되지 않는 형식에 매개 변수를 삽입하려면 유형에 대한 사용자 지정 매개 변수 변환기를 정의할 수 있습니다. 매개 변수 변환기는 사용자 지정 형식에서 문자열에서 문자열으로의 변환을 정의하고 사용자 지정 유형에서 문자열으로의 역방향 방향을 정의할 수 있는 확장입니다.A parameter converter is a Cryostat-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. 팩토리 패턴

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

47.3.5. ParamConverter 인터페이스

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

// 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 메서드를 재정의하고 매개 변수 문자열을 대상 유형으로 변환하려면 toString 메서드(대상 유형을 문자열로 다시 변환)를 수행해야 합니다.

47.3.6. ParamConverterProvider 인터페이스

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

// 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. 매개변수 변환기 공급자 바인딩

매개변수 변환기 공급자를 애플리케이션에서 사용할 수 있도록 하려면 다음과 같이 @Provider 주석을 사용하여 구현 클래스에 주석을 달아야 합니다.

// Java
...
import javax.ws.rs.ext.ParamConverterProvider;
import javax.ws.rs.ext.Provider;

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

이 주석을 사용하면 배포 중 매개 변수 변환기 공급자가 자동으로 등록됩니다.

47.3.8. 예

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

// 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 필드 및 인수에 매개변수를 직접 삽입할 수 있습니다. 예를 들면 다음과 같습니다.

// 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 주석을 추가합니다. 예를 들면 다음과 같습니다.

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

© 2024 Red Hat, Inc.