gpt4 book ai didi

java - Jersey 2.4 ReaderInterceptor 不工作

转载 作者:行者123 更新时间:2023-12-03 18:22:20 24 4
gpt4 key购买 nike

我正在测试 Jersey 拦截器和过滤器。我有这个 Jersey 2.4 拦截器代码:

@Provider
@Test
public class TestInterceptor implements WriterInterceptor, ReaderInterceptor {
private final static Logger log = ....

@Override
public void aroundWriteTo (WriterInterceptorContext context)
throws IOException, WebApplicationException {
log.debug("WriterInterceptor");
context.proceed();
}

@Override
public Object aroundReadFrom(ReaderInterceptorContext ric)
throws IOException, WebApplicationException {
log.debug("ReaderInterceptor");
return ric.proceed();
}
}

我的资源方法:

@Path("{test}")
@GET
@Produces(MediaType.APPLICATION_JSON)
@Test
public FooObj test () {
log.debug("test method");
return new FooObj();
}

两个过滤器:

@Provider
public class ResponseFil implements ContainerResponseFilter {
private final static Logger log = ....

@Override
public void filter(ContainerRequestContext crc, ContainerResponseContext crc1)
throws IOException {
log.debug("ResponseFil");
}
}

@Provider
public class RequestFil implements ContainerRequestFilter {
private final static Logger log = ....
@Override
public void filter(ContainerRequestContext crc) throws IOException {
log.debug("RequestFil");
}
}

还有我的 web.xml servlet 配置:

<servlet>
<description>Servlet test</description>
<servlet-name>REST_servlet</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.test.rest</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

当我从firefox输入url地址资源并得到结果时,日志控制台显示:

RequestFil
test method
ResponseFil
WriterInterceptor

为什么 ReaderInterceptor 没有被执行?我尝试使用两个自定义绑定(bind)名称(@Test 和 @Test2)将写入和读取拦截器分隔在两个类中,结果相同。

谢谢

最佳答案

拦截器(ReaderInterceptor/WriterInterceptor 的实现)仅在请求/响应实体可用时执行。在您的情况下,这意味着只有 WriterInterceptor 正在执行,因为您正在从资源方法向客户端发送实体(FooObj 的实例)。如果您有一个从用户接收输入的 POST 方法,那么您的 ReaderInterceptor 也会被调用。

如果您需要修改请求,即使没有实体存在,请使用 ContainerRequestFilter/ContainerResponseFilter .

JAX-RS 2.0规范了解更多信息。

关于java - Jersey 2.4 ReaderInterceptor 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21430068/

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