如何使用AspectJ捕获任何Jersey POST/GET请求?
我有一个用Jersey框架编写的REST端点。我想创建一个AspectJ切入点,捕捉任何Jersey GET/POST来检查参数。对于servlet来说,这很简单:如何使用AspectJ捕获任何Jersey POST/GET请求?,jersey,aspectj,Jersey,Aspectj,我有一个用Jersey框架编写的REST端点。我想创建一个AspectJ切入点,捕捉任何Jersey GET/POST来检查参数。对于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; imp
"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;
}
}
如果可以的话,我很想使用execution()而不是call(),但是下面的签名可以使用这两种方法。如果您的端点由GET/POST标识:
before():执行(@GET**(..)| |执行(@POST**(..){
Object[]args=thisJoinPoint.getArgs();
…用args做你想做的事
}
您可以将匹配范围缩小到带有@Path的类型中的方法:
执行(@GET**(..)&&&&@在(路径)
如果需要特定参数:
before(BigTest测试):执行(@GET**(..)&&args(test,…)
但是,您需要在每个端点的基础上构建特定的绑定args()子句,而使用thisJoinPoint.getArgs()将适用于任何情况。这种方法有效。很抱歉,由于缺少业力,无法升级投票。实际上我做了一些不同的事情:使用调试器仔细检查了Jersey,发现它使用了:HttpServletRequest.getQueryString(),getPath(),getRequestURL()getRequestURI。我已经有了大多数规则,所以添加剩余的规则非常快。