使用Content-Type:application / json传递null body时无法捕获Exception

时间:2013-03-14 11:10:20

标签: json jersey jax-rs

我编写了一个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有关,必须在那里处理。

1 个答案:

答案 0 :(得分:2)

如果格式体错误等错误请求,则会引发WebApplicationException。以下是选择异常映射器的方法

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

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

以下是我推荐的内容

  • 注册ExceptionMapper<WebApplicationException>

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