java - 拦截Jax-RS方法调用

标签 java jakarta-ee jax-rs resteasy

我想拦截用 @HttpMethod 注释的方法的每个方法调用或它的一些子注释。

我不方便创建注释,我把每个可以被Jax-RS调用的方法都放在上面,所以我转向WriterInterceptorReaderInterceptor .

但是,这些不是我正在寻找的,因为我希望它拦截方法调用,而不是读取/写入过程。

过滤器还不够好,因为我无法捕获该方法抛出的异常。

如果我不必使用任意注释来注释每个方法,第一个解决方案(普通 java-ee 拦截器)将是最佳选择。

我还有什么其他选择?

最佳答案

这可能是特定于容器的,但至少在 Wildfly 18 上我想我可以做你想做的。我正在使用 servlet 过滤器和纯 JAX-RS - 没有任何 RestEasy 特定的内容(也没有 Spring)。我的Application代码的作用是:

@ApplicationPath("/rest")
public class RestApplicationConfig extends Application {
    // intentionally empty
}

我的过滤器是:

@WebFilter(urlPatterns = "/rest/*")
public class FilterTest implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) {

        try {
            filterChain.doFilter(servletRequest, servletResponse);
        }
        catch( Throwable t ) {
            // handle exception
        }
    }
}

请注意,我在 doFilter 周围进行了尝试/捕获称呼。您可以在此处捕获任何异常。一个有趣的补充是我有一个 ContainerRequestFilter还有:

@Provider
@Priority(Priorities.AUTHENTICATION)
@PreMatching
public class AuthContainerRequestFilter implements ContainerRequestFilter {

    @Override
    public void filter(ContainerRequestContext containerRequestContext) throws IOException  {
    }
}

catch直到此代码在 Wildfly 中运行后,才会调用 Filter 中的内容。这是有道理的,因为这是 JAX-RS 部分。

我的“服务”只是:

@Path("/v1/exception")
public class ExceptionService {
    @Produces({ MediaType.TEXT_PLAIN })
    @GET
    public Response getException() {
        throw new InternalError("this is an internal error");
    }
}

关于java - 拦截Jax-RS方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60782999/

相关文章:

java - 如何通过 RestController 创建对象的实例,而不通过 RequestBody 传递构造函数的所有字段?

java - 有没有办法使用接口(interface)在代码中注入(inject)依赖项?

java - 为什么调用 preInstantiateSingletons()

java - RESTful API - 批量操作的分块响应

java - 将响应 header 添加到 JAX-RS Web 服务

jax-rs - 为什么我无法访问 JAX-RS api?

java - KSOAP 元素的排序

java - 将 Google+ 个人资料图片从 Uri 获取到 Android 上的位图

java - Spring 数据JPA : one-to-one instantiation problem: PersistentObjectException: detached entity passed to persist

java - Spring MVC @AutoWired 响应不工作