2016-10-30 80 views
0

我正在嘗試使用spring aop來攔截我的球衣資源方法。我想實現api版本控制,將請求轉換爲最新版本,在資源方法中執行一些工作,然後將響應轉換爲請求的api版本。用Spring aop截獲Jersey資源方法

我目前使用的是spring和jersey。我試圖用spring aop來攔截球衣資源的方法,乍一看它似乎正在工作。但是,我注意到1個問題。

任何通過球衣注入RootResource類(例如@Context HttpHeaders)在使用spring aop時爲null。在建議方法和資源方法中它都是空的。當我禁用aop時,這些屬性被正確注入並可以在資源方法中訪問。

關於正在發生的事情以及如何解決它的任何想法?

RootResource類:

@Component 
@Path("test") 
public class RestService extends BaseService { 

    @Autowired 
    RestService(MyClass myclass) { 
     super(myclass); 
    } 


    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    @Path("{param1}") 
    public Integer get(@PathParam("param1") Integer param1) { 
     // I can access myClass fine, but headers and context are null! 
     return param1; 
    } 

} 

BaseService類:

public abstract class BaseService { 
    @Context 
    public HttpHeaders headers; 
    @Context 
    protected ServletContext context; 

    protected MyClass myClass; 

    BaseService(MyClass myClass) { 
     this.myClass = myClass; 
    } 
} 

Spring AOP的攔截:

@Aspect 
public class Test { 

    @Around("execution(* biocode.fims.rest.services..*.*(..))") 
    public Object transformRequest(ProceedingJoinPoint jp) throws Throwable { 
     BaseService baseService = (BaseService) jp.getTarget(); 
     I can access myClass fine, but headers and context are null; 
     Object val = jp.proceed(); 
     return val; 
    } 
} 

回答

0

好,所以看起來這是在新澤西州spring3的錯誤。 Issue

有一個公關解決這個問題,但沒有評論。我試圖讓這個合併。 Github PR

+0

您可以接受您自己的答案以關閉該問題。 – kriegaex