为什么Jersey在我的代码中没有捕获异常时发送403状态



我使用Jersey创建REST服务,当我得到NullPointerException或其他类型的RuntimeException时,403错误被发送到客户端。为什么Jersey发送的是403而不是500,我该如何更改?

PS:我知道如何创建一个ExceptionMapper,但似乎奇怪的是,创建它到RuntimeException类。我还使用特定的异常扩展WebApplicationException的异常我抛出。

我无法重现您的问题。调用此资源返回500:

@GET
@Path("/npe")
public Response triggerNpe() {
    String npe = null;
    npe.length();        
    return Response.ok().build();
}

反应:

HTTP Status 500 - Internal Server Error
javax.servlet.ServletException: java.lang.NullPointerException

我使用的是带有标准库的Glassfish 4。

这不应该发生。你的错误在某处得到了处理。看看这些注释:

  • @ControllerAdvice
  • @ResponseStatus (HttpStatus.FORBIDDEN)
  • @ExceptionHandler (YourException.class)

最新更新