我正在尝试确定是否可以在REST资源上设置类似拦截器的拦截器,这样如果抛出异常,我可以记录异常并更改返回的响应。我基本上不想用try / catch块包装所有REST资源。如果管理REST资源,我会在所有调用中使用@Interceptor,但由于它没有被管理,这似乎是不可能的。
答案 0 :(得分:2)
您可以使用实施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
。