48.4. 일반 유형 정보가 있는 엔터티 반환
48.4.1. 개요
애플리케이션에서 반환된 개체의 MIME 유형 또는 응답을 serialize하는 데 사용되는 엔터티 공급자를 더 많이 제어해야 하는 경우가 있습니다. JAX-RS javax.ws.rs.core.GenericEntity<T
> 클래스는 엔터티를 나타내는 개체의 일반 유형을 지정하기 위한 메커니즘을 제공하여 엔터티의 직렬화를 제어할 수 있습니다.
48.4.2. GenericEntity<T> 오브젝트 사용
응답을 serialize하는 엔터티 공급자를 선택하는 데 사용되는 기준 중 하나는 개체의 일반 유형입니다. 개체의 일반 유형은 개체의 Java 유형을 나타냅니다. 공용 Java 유형 또는 JAXB 개체가 반환되면 런타임에서 Java 리플렉션을 사용하여 제네릭 형식을 결정할 수 있습니다. 그러나 JAX-RS Response
개체가 반환되면 런타임에서 래핑된 엔터티의 일반 유형을 확인할 수 없으며 개체의 실제 Java 클래스가 Java 유형으로 사용됩니다.
엔터티 공급자에 올바른 일반 유형 정보가 제공되도록 하기 위해 엔터티를 GenericEntity<T
> 개체에 래핑할 수 있습니다.
리소스 메서드는 GenericEntity<T> 개체를 직접 반환할 수도 있습니다.Resource methods can also directly return a GenericEntity<T
> object. 실제로 이 방법은 거의 사용되지 않습니다. GenericEntity<T> 개체에서 래핑되지 않은 엔터티에 대해 저장된 일반 유형 정보와 일반적으로 GenericEntity<T> 개체에 래핑된 엔터티에 저장된 일반 유형 정보는 일반적으로 동일합니다.The generic type information determined by reflect of an unwrapped entity and the generic type information stored for an entity wrapped in a GenericEntity<T
> object are typically the same.
48.4.3. GenericEntity<T> 오브젝트 생성
GenericEntity<T> 오브젝트를 생성하는 방법에는
두 가지가 있습니다.
래핑되는 엔터티를 사용하여
GenericEntity<T
> 클래스의 하위 클래스를 생성합니다. 서브 클래스를 사용하여 GenericEntity<T> 오브젝트 생성 런타임 시 제네릭 형식을 사용할 수 있는 List<String> 형식의 엔터티가 포함된GenericEntity<T
> 개체를 만드는 방법을 보여 줍니다.Shows how to create a GenericEntity<T> object containing an entity of typeList<String
> whose generic type will be available at runtime.서브 클래스를 사용하여 GenericEntity<T> 오브젝트 생성
import javax.ws.rs.core.GenericEntity; List<String> list = new ArrayList<String>(); ... GenericEntity<List<String>> entity = new GenericEntity<List<String>>(list) {}; Response response = Response.ok(entity).build();
GenericEntity<T
>를 생성하는 데 사용되는 서브 클래스는 일반적으로 익명입니다.제네릭 유형 정보를 엔터티와 함께 제공하여 인스턴스를 직접 생성합니다. 예 48.2. “GenericEntity<T> 개체를 직접 인스턴스화합니다.”
AtomicInteger
유형의 엔터티가 포함된 응답을 만드는 방법을 보여줍니다.예 48.2. GenericEntity<T> 개체를 직접 인스턴스화합니다.
import javax.ws.rs.core.GenericEntity; AtomicInteger result = new AtomicInteger(12); GenericEntity<AtomicInteger> entity = new GenericEntity<AtomicInteger>(result, result.getClass().getGenericSuperclass()); Response response = Response.ok(entity).build();