私はspring aopを使用してジャージリソースメソッドをインターセプトしようとしています。私はapiバージョン管理を実装したいところです。要求を最新バージョンに変換し、リソースメソッドでいくつかの作業を行い、要求されたAPIバージョンへの応答を変換します。Spring aopでジャージリソースメソッドをインターセプト
現在、私は春とジャージを使用しています。私はジャージーリソースメソッドを傍受するためにspring aopを使用しようとしました。そして、一見してそれは動作していたようです。しかし、私は1つの問題に気づいた。
jersey(例:@Context HttpHeaders)を介してRootResourceクラスに注入されたものはすべて、spring aopを使用するとnullです。アドバイスメソッドとリソースメソッドの両方で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;
}
}
スプリング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