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;
}
}
您可以接受您自己的答案以關閉該問題。 – kriegaex