0

我有 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

使用上面的代码,当我触发带注释的资源时,不会调用拦截器。需要帮忙!如果需要更多信息,请告诉我。

4

0 回答 0