2
我想确定是否有可能在REST资源上设置类似解决方案的拦截器,这样如果引发异常,我可以记录异常并更改返回的响应。我基本上不想用try/catch块来包装所有的REST资源。如果一个REST资源被管理,我只会在我的所有呼叫中使用一个@Interceptor,但是因为它不被管理,似乎没有问题。REST资源异常拦截器
我想确定是否有可能在REST资源上设置类似解决方案的拦截器,这样如果引发异常,我可以记录异常并更改返回的响应。我基本上不想用try/catch块来包装所有的REST资源。如果一个REST资源被管理,我只会在我的所有呼叫中使用一个@Interceptor,但是因为它不被管理,似乎没有问题。REST资源异常拦截器
您可以使用实施javax.ws.rs.ext.ExceptionMapper
。假设您的代码可能会从资源中抛出YourFancyException
。然后你可以使用下面的映射:
@Provider
public class YourFancyExceptionMapper
implements ExceptionMapper <YourFancyException> {
@Override
public Response toResponse(YourFancyException exception) {
return Response.status(Response.Status.BAD_REQUEST)
.entity(exception.getMessage()).build();
}
}
不要忘了@Provider
注释映射器,使您的资源的方法抛出YourFancyException
。
有没有办法按照每种方法做到这一点?我不希望它改变传统资源。另外,如果我为“异常”做了这个,它会捕获所有异常吗? – EpicOfChaos
它工作在“每个异常”的基础上,而不是“每个方法”,但映射器仅捕获资源方法抛出的异常。所以,它不应该成为遗留资源的问题,因为我们已经用try/catch处理异常了。是的,如果您使用映射器作为“Exception”,它会捕获所有异常(从资源方法抛出)。 – dcernahoschi