resteasy中的全局自定义异常处理程序

Max*_*iev 5 resteasy

是否可以为所有意外错误创建全局异常处理程序.因为不可能像这样制作所有可能的类:

public class ExceptionHandler implements ExceptionMapper<JsonMappingException> {...}
Run Code Online (Sandbox Code Playgroud)

我想要这样的东西:

public class ExceptionHandler implements ExceptionMapper<Exception> 
Run Code Online (Sandbox Code Playgroud)

Poo*_*ool 10

请注意,虽然接受的答案确实捕获了所有异常,但它会导致许多其他问题,例如干扰Resteasy 的内部异常处理.

因此,如果采用此方法,还应为每个对您而言重要的方法构建自定义异常映射.

特别是此方法将破坏内置的CORS处理,因此如果允许CORS响应,则应创建CORS自定义异常映射器.

@Provider
public class DefaultOptionsExceptionHandler implements ExceptionMapper<DefaultOptionsMethodException> {

    @Override
    public Response toResponse(DefaultOptionsMethodException e) {
        return e.getResponse(); 
    }
}
Run Code Online (Sandbox Code Playgroud)


Chr*_*ler 6

您可能可以执行以下操作:

@Provider
public class GlobalExceptionHandler implements ExceptionMapper<Exception> {
    public Response toResponse(Exception exception) {
        return Response.status(Status.INTERNAL_SERVER_ERROR)
            .entity("An error occured").type(MediaType.TEXT_PLAIN)
            .build();
    }
}
Run Code Online (Sandbox Code Playgroud)

我刚刚在 RESTEasy 3.0.6.Final 中对其进行了测试,它似乎可以工作。请记住,500 Internal Server Error状态代码可能并不总是合适的。

  • 这个异常处理程序覆盖了所有默认的 RESTEasy 异常处理程序(比如 NotFoundException 处理程序等等)。那真的不太方便。 (4认同)