1

我编写了一个 ExceptionMapper 来捕获我的应用程序中的所有 http 异常 (400,404,500,...)。

    @Provider
    public class MyExceptionHandler implements ExceptionMapper<Exception> {

    @Override
    public Response toResponse(Exception ex) {
        //Some Code to build Response
    }

不幸的是,当我使用 Content-Type:application/json 发送带有空或错误格式正文的发布请求时,会发生此错误,我无法在 MyExceptionHandler 中捕获它。

Status Code: 400 Bad Request

No content to map due to end-of-input
 at [Source: org.apache.catalina.connector.CoyoteInputStream@5774bb5e; line: 1, column: 1]

我做错什么了?

非常感谢。

环境:JAX-RS、GlassFish 3

编辑:我认为这个错误与 AppServer 有关,必须在那里处理。

4

1 回答 1

2

当有错误的请求(例如错误的格式正文)时,WebApplicationException会抛出 。以下是选择异常映射器的方式

  • 当抛出具有空实体主体的 WebApplicationException 或其子类之一时,运行时将检查是否存在处理 WebApplicationException 异常的异常映射器。如果存在异常,则映射器用于创建发送给消费者的响应。

  • 当抛出除 WebApplicationException 异常或其子类之一之外的任何异常时,运行时将检查适当的异常映射器。如果它处理抛出的特定异常,则选择异常映射器。如果抛出的特定异常没有异常映射器,则选择最近的异常超类的异常映射器。

这是我推荐的

  • 注册一个ExceptionMapper<WebApplicationException>

  • 注册一个ExceptionMapper<Throwable>以捕获所有其他异常,并发出一个 500 服务器错误信号的通用响应。

于 2013-03-15T20:12:47.590 回答