的 修改 的
我认为存在一些混淆,我在控制器中没有使用以下两种方法。我只是使用“doMethod(HttpServletRequest request)”。然后我的建议适用并相应地起作用。我的问题是“doMethod(HttpServletRequest请求)”不需要HttpServletRequest参数,只有应用于它的建议才使用它。所以我想知道我是否可以将我的方法从“doMethod(HttpServletRequest request)”更改为“doMethod()”,但仍然可以使用应用的建议拦截HttpServletRequest(因为我知道spring可以在某处访问它)< / p>
在Spring MVC中你可以有这样的方法:
@RequestMapping
public void doMethod() {
//some logic here
}
如果我需要其他一些论证,我可以改为:
@RequestMapping
public void doMethod(HttpServletRequest httpServletRequest) {
//some logic with request
}
并且spring会以同样的方式委托给同一个方法,但如果我通过一些魔法添加它(我不明白),请填写参数。
我的问题是当这样做时:
@Before(value=(execution(* * com.domain.package.doMethod(..)), argNames=httpServletRequest)
public void advice(HttpServletRequest httpServetRequest) {
//some before advice
}
这在应用于第二个方法定义时是有意义的,但是当它不包含'HttpServletRequest'参数时,我怎么能让它与第一个一起使用?
答案 0 :(得分:1)
我认为你不能做你想做的事。 Spring MVC从HTTP请求(属性,URL等)注入参数。它们还支持一个“内置”参数列表,如果提到这些参数,则始终发送。
当在HTTP请求上下文中正常调用控制器时,将始终发送HttpRequest
的实例,因此将永远不会调用此方法的第一个无参数版本。
要调用它,您应该将其映射到不同的URL或不同的HTTP方法或不同的内容类型。