代码之家  ›  专栏  ›  技术社区  ›  Felk

JAX-RS拦截器在void方法上映射异常

  •  3
  • Felk  · 技术社区  · 6 年前

    我试图使用一个拦截器来内省和更改后端发生的异常。拦截器看起来像这样:

    public class ApplicationErrorInterceptor {
        private static final Logger LOGGER = Logger.getLogger(ApplicationErrorInterceptor.class);
    
        @AroundInvoke
        public Object handleException(InvocationContext context) {
            try {
                return context.proceed();
            } catch (Exception ex) {
                LOGGER.errorf(ex, "An unhandled exception occured!");
                return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
                        .entity("some custom 500 error text")
                        .build();
            }
        }
    }
    

    @Path("/somepath")
    @Interceptors({ApplicationErrorInterceptor.class})
    public interface SomeRestService {
        @POST
        @Path("getResponse")
        Response getResponse();
    
        @POST
        @Path("getVoid")
        void getVoid();
    }
    

    假设这两个方法的实现都抛出异常。我希望在这两种情况下,都将异常映射到一个500服务器错误和提供的自定义消息。不幸的是,返回void的方法将映射到204 No Content响应。如果我完全删除拦截器,将发生默认的500服务器错误,这至少是正确的状态代码,但我丢失了错误自定义

    0 回复  |  直到 6 年前