48.3. 微调应用程序的响应

48.3.1. 构建响应的基础知识

概述

RESTful 服务通常需要更精确地控制返回到消费者的响应,而在资源方法返回普通 Java 结构时要被允许。JAX-RS Response 类允许资源方法对发送到消费者的返回状态进行一些控制,并在响应中指定 HTTP 消息标头和 Cookie。

响应 对象嵌套了代表消费者返回实体的对象。使用 Response Builder 类作为工厂来实例化响应对象。

ResponseBuilder 类也有许多用于操作响应的元数据的方法。例如,ResonseBuilder 类包含设置 HTTP 标头和缓存控制指令的方法。

响应和响应构建器之间的关系

响应 类具有受保护的构造器,因此无法直接实例化。它们使用由 Response 类包含的 ResponseBuilder 类创建。ResponseBuilder 类是所有信息的拥有者,它们将封装在从它创建的响应中。ResponseBuilder 类也具有负责设置消息上的 HTTP 标头属性的所有方法。

Response 类提供一些方法来轻松设置正确的响应代码并嵌套该实体。各个常见响应状态代码有方法。与包含实体正文或所需元数据的状态对应的方法包括允许直接将信息设置为关联的响应构建器的版本。

ResponseBuilder 类的 build() 方法会返回一个响应对象,其中包含调用方法时在响应构建器中存储的信息。返回响应对象后,响应构建器将返回到干净状态。

获取响应构建器

获取响应构建器的方法有两种:

  • 使用 Response 类的静态方法,如 使用 Response 类获取响应构建器 所示。

    使用 Response 类获取响应构建器

    import javax.ws.rs.core.Response;
    
    Response r = Response.ok().build();

    当获得响应构建器时,您无法访问多个步骤的实例。您必须将所有操作的字符串到一个方法调用中。

  • 使用 Apache CXF 特定 ResponseBuilderImpl 类。此类允许您直接与响应构建器一起使用。但是,它要求您手动设置所有响应构建器信息。

    例 48.1 “使用 ResponseBuilderImpl 类获取响应构建器” 显示如何使用 ResponseBuilderImpl 类重写 使用 Response 类获取响应构建器

    例 48.1. 使用 ResponseBuilderImpl 类获取响应构建器

    import javax.ws.rs.core.Response;
    import org.apache.cxf.jaxrs.impl.ResponseBuilderImpl;
    
    ResponseBuilderImpl builder = new ResponseBuilderImpl();
    builder.status(200);
    Response r = builder.build();
    注意

    您也可以简单地将 ResponseBuilder 返回的 Response Builder 方法分配到 ResponseBuilderImpl 对象。

更多信息

有关 Response 类的更多信息,请参阅 Response 类的 Javadoc

有关 ResponseBuilder 类的更多信息,请参阅 ResponseBuilder 类的 Javadoc

如需有关 Apache CXF ResponseBuilderIml 类的更多信息,请参阅 ResponseBuilderImpl Javadoc