当前位置: 首页 > 面试题库 >

在Spring的@Controller方法上使用@Before方面不起作用

穆理
2023-03-14
问题内容

我有一个使用Spring
3的Web应用程序,其中的控制器使用@Controller进行了注释。控制器的公共方法以@RequestMapping注释。这工作得很好。

现在,我想在调用控制器中的任何公共方法之前进行检查。我使用一个Pointcut表达式创建了一个@Before方面,该表达式选择了所有带有@RequestMapping注释的控制器方法。我已经使用注册了方面

<aop:aspectj-autoproxy>
    <aop:include name="myAspect"/>
</aop:aspectj-autoproxy>

问题是,当我启动该应用程序并请求由我的一个控制器处理的某些URL时,我收到以下错误消息:

“处理程序XXX没有适配器:您的处理程序是否实现了受支持的接口,例如Controller?”

因此,控制器不再起作用。有谁知道如何解决这个问题?


问题答案:

肖恩·帕特里克·弗洛伊德(Sean Patrick Floyd)是对的。还有另一种方法:从Spring Proxy AOP切换到CGILib。

从Spring参考:

在那些需要建议在接口上未声明的方法或需要将代理对象作为具体类型传递给方法的情况下(在极少数情况下),可以强制使用CGLIB。

http://static.springsource.org/spring/docs/3.0.x/reference/aop.html#aop-
autoproxy-force-
CGLIB

要强制使用CGLIB代理,请将<aop:config> 元素的proxy-target-class属性的值设置为true:<aop:config proxy-target-class="true">

要在使用@AspectJ自动代理支持时强制CGLIB代理,请将<aop:aspectj-autoproxy>元素的’proxy-target-
class’属性设置为true:<aop:aspectj-autoproxy proxy-target-class="true"/>

顺便说一句:我建议改用AspectJ或Spring Proxy CGILib AOP。 /



 类似资料:
  • 我从Spring文档中获得了以下内容: 现在我已经为测试目的创建了一个控制器。它有一个GET和一个POST方法,每个方法都只使用@requestparam java.util.map作为参数。在方法体中,我只是试图打印地图的大小。当我只在GET方法中发送请求(GET/post)时,映射包含任何键/值对。我在Firefox中使用海报插件,我发送了三个参数。 你们中有谁知道为什么@RequestPar

  • 方法在我发出请求的另一个程序上执行: 邮递员中的结果:在此处输入图像描述 日志:2021-07-30 13:15:30.376警告4398---[nio-8080-exec-8]。W.S.M.S.DefaultHandlerExceptionResolver:解析[org.springframework.http.converter.HttpMessageNotreadableException:

  • 问题内容: 我正在学习有关Java的知识,并且一直困扰着这个问题:当我尝试使用简单的方法(例如)时,编译器给我错误。这是代码: 该方法在Javadoc中定义。 这样做应该很简单,但是我真的不知道我在做什么错。 问题答案: 您已经创建了自己的类,并且没有使用内置的Java类。您尚未定义。

  • 和UserServiceImpl: 在前端,我创建了一个简单的表,如下所示: 现在,当我启动我的应用程序并单击删除按钮时,我在网站上出现了这样的错误:当前线程没有实际事务可用的EntityManager-不能可靠地处理“Remove”调用;嵌套异常是javax.persistence.TransactionRequiredException:当前线程没有实际事务可用的EntityManager-不

  • 问题内容: 嗨,我正在使用我的登录页面。我需要像这样传递数据 我正在使用POST方法发送数据,我已经在DHC中进行了检查,Api在DHC中工作正常,并且我正在获取JSON Response ,但是当我尝试使用Volley时,我无法获得响应。甚至在我的logcat中也没有任何错误。 JAVA代码 错误 问题答案: 解决了您的问题。刚刚使用和传递的参数形式: 无需覆盖或。 问题:1 因为服务器接受了a

  • 这是我的控制器: 这是我访问http://localhost:8080/area/1时得到的: 无法转换“java”类型的值。lang.String'转换为必需的类型'int';嵌套的例外是java。lang.NumberFormatException:对于输入字符串:“asd3333”] 我测试了这个随机返回,只是为了显示发生了什么...该方法首先用请求中的@PathVariable=1调用,然

  • 问题内容: 我对Spring 3.2.3 @Transactional注解有疑问。我的服务类如下所示: 如果我调用persist()方法,所有方法都可以正常工作。但是,如果我在类级别将@Transactional注释掉- 事务将不会启动。谁能告诉我为什么Spring只能在methol级忽略@Transactional? 问题答案: 您不能从processDisclosureData()调用pers

  • 我正在使用演示APi(http://dummy.restapiexample.com/update) 我有一个响应类UpdateResponse 我有一个Api类和一个APIInterface 和对话框而不是主活动 在APIInterface中使用PUT方法有一个@path(id)和三个@fields(name、salary、age) 下面是UpdateResponse类代码 Api接口代码如下