50.2. 使用 WebApplicationException 异常报告


            errors
indexterm:[WebApplicationException]

概述

JAX-RS API 引入了 WebApplicationException 运行时异常,为资源方法创建适合 RESTful 客户端使用的异常方法。WebApplicationException 异常可以包含 Response 对象,用于定义要返回到请求来源器的实体正文。它还提供了在不提供任何实体正文时指定 HTTP 状态代码的机制。

创建简单例外

创建 WebApplicationException 异常的最简单方法是使用 no 参数构造器或将原始异常嵌套在 WebApplicationException 异常的构造器。两个构造器都使用空响应创建 WebApplicationException。

当引发这些构造器创建的异常时,运行时会返回一个空实体正文和状态代码 500 Server Error 的响应。

设置返回到客户端的状态代码

当您要返回 500 之外的错误代码时,您可以使用允许指定状态的四个 WebApplicationException 构造器之一。例 50.1 “使用状态代码创建 WebApplicationException” 中显示的两个构造器将返回状态作为整数。

例 50.1. 使用状态代码创建 WebApplicationException

WebApplicationExceptionintstatusWebApplicationExceptionjava.lang.Throwablecauseint状态

例 50.2 “使用状态代码创建 WebApplicationException” 所示的另一个两个响应状态作为 Response.Status 实例。

例 50.2. 使用状态代码创建 WebApplicationException

WebApplicationExceptionjavax.ws.rs.core.Response.StatusstatusWebApplicationExceptionjava.lang.Throwablecausejavax.ws.rs.core.Response.Status状态

当引发这些构造器创建的异常时,运行时会返回一个空实体正文和指定状态代码的响应。

提供实体正文

如果您希望信息要随例外一起发送,您可以使用采用 Response 对象的 WebApplicationException 构造器之一。运行时使用 Response 对象来创建发送到客户端的响应。响应中存储的实体正文映射到消息的实体正文,响应的 status 字段映射到消息的 HTTP 状态。

例 50.3 “发送消息及异常信息” 显示将文本消息返回到包含异常原因的客户端,并将 HTTP 消息状态设置为 409 Conflict

例 50.3. 发送消息及异常信息

import javax.ws.rs.core.Response;
import javax.ws.rs.WebApplicationException;
import org.apache.cxf.jaxrs.impl.ResponseBuilderImpl;

...
ResponseBuilderImpl builder = new ResponseBuilderImpl();
builder.status(Response.Status.CONFLICT);
builder.entity("The requested resource is conflicted.");
Response response = builder.build();
throw WebApplicationException(response);

扩展通用异常

可以扩展 WebApplicationException 异常。这可让您创建自定义例外并消除一些样板代码。

例 50.4 “扩展 WebApplicationException” 显示创建新例外,它创建了与 例 50.3 “发送消息及异常信息” 中的代码类似的响应。

例 50.4. 扩展 WebApplicationException

public class ConflicteddException extends WebApplicationException
{
  public ConflictedException(String message)
  {
    ResponseBuilderImpl builder = new ResponseBuilderImpl();
    builder.status(Response.Status.CONFLICT);
    builder.entity(message);
    super(builder.build());
     }
}

...
throw ConflictedException("The requested resource is conflicted.");
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.