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&gt; 对象有两种方法:

  1. 使用被嵌套的实体,创建 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> 对象的 子类通常是匿名的。

  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.