我有一个简单的 RESTEasy 应用程序,方法如下:
@POST
@Path("/stuff")
@Produces({"application/json", "application/xml"})
public MyObject doStuff(MultivaluedMap<String, String> String formParams) {
// do stuff
}
我想拦截进来的消息,但不知何故我的拦截器没有触发。这里是:
@Provider
@ServerInterceptor
@Precedence("SECURITY")
public class JAXRSInterceptor implements MessageBodyReaderInterceptor {
public Object read(MessageBodyReaderContext context) throws IOException, WebApplicationException {
//do stuff
return context.proceed();
}
}
这是我的 RESTEasy 依赖项:
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<version>2.3.4.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxb-provider</artifactId>
<version>2.3.4.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson-provider</artifactId>
<version>2.3.4.Final</version>
</dependency>
这是 web.xml 的一部分:
<web-app>
<display-name>My frontend</display-name>
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
<listener>
<listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
</listener>
<context-param>
<param-name>resteasy.use.builtin.providers</param-name>
<param-value>true</param-value>
</context-param>
<servlet>
<servlet-name>Frontend</servlet-name>
<servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Frontend</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
...
REST 服务运行良好,而且我还有一个ExceptionMapper可以正常工作。
拦截器仍然不起作用。我已经尝试过 Tomcat 6 和 7。我做错了什么?
我做了一个简单的例子来演示https://github.com/henrik242/resteasy-interceptor-demo上的问题。在 Tomcat 下构建和部署,并访问http://localhost:8080/resteasy-interceptor-demo
. 运行测试#1、#2 和#3。
编辑:这看起来像一个错误。我已将其归档为https://issues.jboss.org/browse/RESTEASY-797