48.4. 使用通用类型信息返回实体


概述

在有些情况下,应用程序需要对返回的对象的 MIME 类型进行更多控制,或用于序列化响应的实体供应商。JAX-RS javax.ws.rs.core.GenericEntity<T > 类通过提供指定代表实体的通用对象类型的机制,提供对实体序列化的精细控制。

使用 GenericEntity<T> 对象

用于选择序列化响应的实体提供程序的标准之一是对象的通用类型。对象的通用类型代表对象的 Java 类型。当返回通用 Java 类型或 JAXB 对象时,运行时可以使用 Java 反映来确定通用类型。但是,当返回 JAX-RS Response 对象时,运行时无法确定嵌套实体的通用类型,对象的实际 Java 类被用作 Java 类型。

为确保实体供应商提供了正确的通用类型信息,可在将实体添加到返回的 Response 对象前嵌套在 GenericEntity<T > 对象中。

资源方法也可以直接返回 GenericEntity<T> 对象。实际上,这种方法很少被使用。通过反映未封装实体以及存储在 GenericEntity<T> 对象中的实体的通用类型信息所确定的 通用类型信息通常相同。

创建 GenericEntity<T> 对象

创建 GenericEntity<T&gt; 对象的方法有两种:

  1. 使用所包装实体,创建 GenericEntity<T > 类的子类。使用子类创建 GenericEntity<T> 对象 演示了如何创建一个 GenericEntity<T> 对象,其中包含一个类型 List<String& gt; 的实体,其通用类型将在运行时可用。

    使用子类创建 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&gt; 对象的子类通常是匿名的。

  2. 通过向实体提供通用类型信息来直接创建一个实例。例 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();
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.