48.4. 使用通用类型信息返回实体
概述
有时,应用程序需要对所返回对象的 MIME 类型进行更多控制,或者用于序列化响应的实体提供商。JAX-RS javax.ws.rs.core.GenericEntity<T
> 类通过提供指定代表该实体的通用类型的机制,提供对实体的串行控制。
使用通用性<T>对象
用于选择序列化响应的实体提供程序的一种条件是对象的通用类型。对象的通用类型代表对象的 Java 类型。当返回通用 Java 类型或 JAXB 对象时,运行时可以使用 Java 反映来确定通用类型。但是,当返回 JAX-RS Response
对象时,运行时无法决定嵌套实体的通用类型,对象的实际 Java 类用作 Java 类型。
为确保实体提供程序以正确的通用类型信息提供,在将请求对象添加到 Response
对象前,可以将实体 嵌套在 GenericEntity<T
> 对象中。
资源方法也可以直接返回 通用Entity<T>
对象。在实践中,这个方法很少被使用。通过反映未打包的实体确定的通用类型信息,为在通用性< T> 对象中嵌套的实体存储的通用
类型信息通常相同。
创建通用性<T> 对象
创建 通用Entity<T>
; 对象有两种方法:
使用被嵌套的实体,创建
GenericEntity<T
> 类的子类。使用子类创建通用性<T> 对象 演示了如何创建GenericEntity<T>
对象,其中包含一个类型为List<String&
gt; 的实体,其通用类型将在运行时可用。使用子类创建通用性<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();