我编写了一个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有关,必须在那里处理。
答案 0 :(得分:2)
如果格式体错误等错误请求,则会引发WebApplicationException
。以下是选择异常映射器的方法
当WebApplicationException或其子类之一带有 抛出空实体主体,运行时将检查是否存在 是一个处理WebApplicationException的异常映射器 例外。如果有异常mapper用于创建 发送给消费者的回复。
除WebApplicationException异常以外的任何异常,或 抛出其中一个子类,运行时将检查一个 适当的异常映射器。如果是,则选择异常映射器 处理抛出的特定异常。如果没有例外 mapper用于抛出的特定异常,异常 选择最近的异常超类的映射器。
以下是我推荐的内容
注册ExceptionMapper<WebApplicationException>
注册ExceptionMapper<Throwable>
以捕获所有其他异常,其中包含发出500个服务器错误的通用响应。