我有 2 个拦截器用于请求响应日志记录。我正在尝试让我的 Reader/Writer Interceptor 与 @NameBinding 一起使用。如果我在 beans.xml 中为服务器添加提供程序,它可以工作,如下所示:
<jaxrs:providers>
<ref bean="jsonProvider"/>
<ref bean="jaxbProvider" />
<ref bean="fooReaderInterceptor"/>
<ref bean="fooWriterInterceptor"/>
<jaxrs:providers>
但是由于这将拦截器与所有资源绑定在一起,我尝试了以下使用 @NameBinding 并将其仅绑定到特定资源。
FooAnnotation.java:
package a;
import javax.ws.rs.NameBinding;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@NameBinding
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface fooAnnotation {
}
FooReaderInterceptor/FooWriterInterceptor :
package a;
import javax.ws.rs.WebApplicationException;
import javax.ws.rs.ext.Provider;
import javax.ws.rs.ext.ReaderInterceptor;
import javax.ws.rs.ext.ReaderInterceptorContext;
@Provider
@FooAnnotation
public class FooReaderInterceptor implements ReaderInterceptor {
//some logging logic
}
资源接口:
package b;
@Path("somePath")
public interface SomeService {
@POST
@Consumes({"application/xml", "application/json"})
@Produces({"application/xml", "application/json"})
@Path("/path")
@FooAnnotation
Response someResource();
//other resources
}
资源实施:
package b
...
@Override
@FooAnnotation
public Response someResource(){
//business logic
}
使用的依赖项:
cxf-minimal-bundle : 2.7.16
cxf-rt-frontend-jaxrs : 3.1.6
使用上面的代码,当我触发带注释的资源时,不会调用拦截器。需要帮忙!如果需要更多信息,请告诉我。