如何使用AspectJ捕获任何Jersey POST/GET请求?

如何使用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

我有一个用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;
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。我已经有了大多数规则,所以添加剩余的规则非常快。