gpt4 book ai didi

java - 拦截Jax-RS方法调用

转载 作者:行者123 更新时间:2023-12-02 08:50:52 26 4
gpt4 key购买 nike

我想拦截用 @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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com