关于MVC方法的Spring建议缺少参数

时间:2012-03-19 10:33:55

标签: java spring-mvc spring-aop

修改

我认为存在一些混淆,我在控制器中没有使用以下两种方法。我只是使用“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'参数时,我怎么能让它与第一个一起使用?

1 个答案:

答案 0 :(得分:1)

我认为你不能做你想做的事。 Spring MVC从HTTP请求(属性,URL等)注入参数。它们还支持一个“内置”参数列表,如果提到这些参数,则始终发送。

当在HTTP请求上下文中正常调用控制器时,将始终发送HttpRequest的实例,因此将永远不会调用此方法的第一个无参数版本。

要调用它,您应该将其映射到不同的URL或不同的HTTP方法或不同的内容类型。

相关问题