我有一个用Jersey框架编写的REST端点。我想创建一个AspectJ切入点,捕获任何Jersey GET / POST来检查params。对于servlet来说很简单:
"call(public java.lang.String javax.servlet.ServletRequest.getParameter(java.lang.String))"
这里是Jersey REST端点的代码:
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.xml.bind.annotation.XmlRootElement;
@Path("/test/{username}")
public class JerseyTest {
@XmlRootElement
public static class BigTest {
public String name;
}
@GET
@Produces("text/plain")
public String getHello(BigTest test, @PathParam("username") String username) {
return "hello " + username;
}
}
答案 0 :(得分:0)
如果可以的话,我很想使用execution()而不是call(),但下面的签名可以使用。如果您的端点由GET / POST识别:
before(): execution(@GET * *(..)) || execution(@POST * *(..)) {
Object[] args = thisJoinPoint.getArgs();
... do what you want with the args
}
您可以使用@Path对类型中的方法进行缩小:
execution(@GET * *(..)) && @within(Path)
如果您需要特定参数:
before(BigTest test): execution(@GET * *(..)) && args(test,..)
但是你需要在每个端点的基础上构建特定的绑定args()子句 - 而使用thisJoinPoint.getArgs()将适用于任何事情。