我有许多使用javax.ws.rs.Path注释公开为JAX-RS请求“处理程序”的类。我想在每个请求之前和之后添加某些操作。另外,我需要创建一个全局应用程序范围的异常处理程序,它将捕获这些处理程序和协议抛出的所有内容。

是否可以使用标准JAX-RS来实现此目的,而无需创建从com.sun.jersey.spi.container.servlet.ServletContainer继承的自定义类(我正在使用Jersey)。

最佳答案

您也可以使用ExceptionMappers。此机制捕获您的服务引发的异常并将其转换为适当的响应:

@Provider
public class PersistenceMapper implements ExceptionMapper<PersistenceException> {

    @Override
    public Response toResponse(PersistenceException arg0) {
        if(arg0.getCause() instanceof InvalidDataException) {
           return Response.status(Response.Status.BAD_REQUEST).build();
        } else {
           ...
        }
    }

}

有关更多信息,请参见:
  • JAX-RS using exception mappers
  • 07-27 13:28