java - Spring 对缺少参数的 MVC 方法的建议

标签 java spring-mvc spring-aop

编辑

我认为存在一些困惑,我没有在 Controller 中使用以下两种方法。我只是使用“doMethod(HttpServletRequest request)”。然后我的建议就会得到应用并发挥作用。我的问题是“doMethod(HttpServletRequest request)”不需要 HttpServletRequest 参数,只有应用于它的建议才使用它。所以我想知道是否可以将我的方法从“doMethod(HttpServletRequest request)”更改为“doMethod()”,但仍然能够拦截 HttpServletRequest 并将建议应用于它(因为我知道 spring 可以在某处访问它)

在 Spring MVC 中你可以有这样的方法:

@RequestMapping
public void doMethod() {
    //some logic here
}

如果我需要其他参数,我可以将其更改为:

@RequestMapping
public void doMethod(HttpServletRequest httpServletRequest) {
    //some logic with request
}

无论哪种方式,spring都会委托(delegate)给相同的方法,但如果我通过一些魔法(我不明白)添加它,请为我填写参数

我的问题是像这样执行 aop 时:

@Before(value=(execution(* * com.domain.package.doMethod(..)), argNames=httpServletRequest)
public void advice(HttpServletRequest httpServetRequest) {
    //some before advice
}

这在应用于第二个方法定义时是有意义的,但是当它不包含“HttpServletRequest”参数时,如何才能使其与第一个方法一起使用?

最佳答案

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

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

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

关于java - Spring 对缺少参数的 MVC 方法的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9768640/

相关文章:

java - Tomcat登录问题

java - 检查物体坐标是否满足要求

java - 如何用jvisualvm监控Tomcat,显示visualgc?

java - 控制台的@NumberFormat注解

java - Spring MVC : large files for download, OutOfMemoryException

java - Spring in Action 第 4 章 testTrackCounter 未通过测试

java - Spring Data Rest 覆盖存储库( Controller 与 AOP)

java - 如何处理具有不同参数的相同 URL?

java - 将 Spring MVC 与 Google Guava AtomicLongMap 结合使用

java - DefaultAdvisorAutoProxyCreator 导致 @Autowired 依赖项保持为空