使用 Spring aop 拦截 Jersey 资源方法
Intercepting Jersey Resource Methods with Spring aop
我正在尝试使用 spring aop 拦截我的球衣资源方法。我想实现 api 版本控制,我将请求转换为最新版本,在资源方法中做一些工作,然后将响应转换为请求的 api 版本。
我目前正在使用 spring 和球衣。我尝试使用 spring aop 来拦截 jersey 资源方法,乍一看它似乎可以工作。但是,我注意到 1 个问题。
在使用 spring aop 时,通过 jersey(例如 @Context HttpHeaders)注入 RootResource class 的任何内容都是空的。它在建议方法和资源方法中都为空。当我禁用 aop 时,属性被正确注入并可在资源方法中访问。
关于正在发生的事情以及如何解决它有什么想法吗?
根资源class:
@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;
}
}
基础服务class:
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;
}
}
我正在尝试使用 spring aop 拦截我的球衣资源方法。我想实现 api 版本控制,我将请求转换为最新版本,在资源方法中做一些工作,然后将响应转换为请求的 api 版本。
我目前正在使用 spring 和球衣。我尝试使用 spring aop 来拦截 jersey 资源方法,乍一看它似乎可以工作。但是,我注意到 1 个问题。
在使用 spring aop 时,通过 jersey(例如 @Context HttpHeaders)注入 RootResource class 的任何内容都是空的。它在建议方法和资源方法中都为空。当我禁用 aop 时,属性被正确注入并可在资源方法中访问。
关于正在发生的事情以及如何解决它有什么想法吗?
根资源class:
@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;
}
}
基础服务class:
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;
}
}