JAX-RS ExceptionMapper没有捕获IllegalArgumentException

时间:2017-07-03 03:57:22

标签: java json jax-rs

以下ExceptionMapper无法捕获IllegalArgumentException并向客户端返回BAD_REQUEST响应的原因是什么?

如果客户端将JSON数组而不是预期的JSON对象发送到JAX-RS资源,则此ExceptionMapper应该捕获异常并以400响应。此外,它还提供了一个JSON对象来更详细地描述错误。

@Provider
public class IllegalArgumentExceptionMapper implements ExceptionMapper<IllegalArgumentException> {
    public Response toResponse(IllegalArgumentException ex) {
        JsonObject json = Json.createObjectBuilder().add("message", "Body should be a JSON Object").build();
        return Response.status(Response.Status.BAD_REQUEST).entity(json).build();
   }
}

然而,它没有这样做,而是客户端在响应中收到带有HTML格式的堆栈跟踪的500以及日志中的以下内容:

[2017-07-03T03:47:02.635+0000] [Payara 4.1] [WARNING] [] [javax.enterprise.web] 
  [tid: _ThreadID=28 _ThreadName=http-listener-1(1)] [timeMillis: 1499053622635] 
  [levelValue: 900] [[ StandardWrapperValve[myApp.JaxRsConfiguration]:
  Servlet.service() for servlet myApp.JaxRsConfiguration threw exception
  java.lang.IllegalArgumentException: argument type mismatch

这是资源操作:

@POST
public Response postSignup(JsonObject signupJson) throws UnprocessableEntityException { ... }

我们在这里谈论Java EE 7,我尝试使用Payara 4.1和股票JAX-RS Provider运行,没有涉及框架。

0 个答案:

没有答案