【问题标题】:Spring 4 Migration -ClassCastException : cannot be cast to org.springframework.web.method.HandlerMethod?Spring 4 Migration -ClassCastException:不能转换为 org.springframework.web.method.HandlerMethod?
【发布时间】:2014-01-30 14:32:14
【问题描述】:

我在从 Spring 3.0 升级到 4.0 时遇到此异常

我用这个link更新了已弃用的类

DefaultAnnotationHandlerMapping,AnnotationMethodHandlerAdapterRequestMappingHandlerMapping ,RequestMappingHandlerAdapter

java.lang.ClassCastException: AuditingController$$EnhancerByCGLIB$$992fb2c8 cannot be cast to org.springframework.web.method.HandlerMethod 

at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)

这是 bean 的定义

<bean name="handlerAdapter"
    class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
            <property name="messageConverters">
        <array>
            ....

           ....
        </array>
    </property>
</bean>

在我的测试用例中调用这个函数。

  handlerAdapter.handle(request, response, controller);

调用org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter

return handleInternal(request, response, (HandlerMethod) handler);

这里无法将控制器转换为HandlerMethod

【问题讨论】:

  • 您的测试用例是错误的,处理@RequestMethod 注释的方法已经从AnnotationMethodHandlerAdapterRequestMappingHandlerAdapter 发生了相当大的变化。它现在直接指向要调用的方法(即 HandlerMethod ),因此将您的完整控制器放在那里不再起作用,
  • 你为什么还要测试 Spring 类?你应该测试你的@Controller bean。这些 HandlerAdapter 对象由 Spring 的 DispatcherServlet 堆栈(和 MVC 配置)使用。您应该假设它们可以工作并测试您自己的代码。
  • @SotiriosDelimanolis - 我正在测试我的控制器本身。不测试春季课程。我正在使用MockHttpServletRequest, MockHttpServletResponse, HandlerAdapter 并测试响应数据
  • 我想说的是你不应该这样做。使用 Spring MVC 的全部意义在于通过DispatcherServlet。如果您要绕过DispatcherServlet,您并没有真正测试您的控制器。只需从您的 MVC 配置中设置一个 MockMvc 对象并通过那里测试您的请求。

标签: java spring spring-mvc classcastexception spring-4


【解决方案1】:

它现在正在工作。正如link 中提到的,我需要更新我的控制器测试用例才能使用

WebApplicationContext,MockMvc & RequestMappingHandlerAdapter 

而不是

MockHttpServletRequest, MockHttpServletResponse & HandlerAdapter.

【讨论】:

    猜你喜欢
    • 2016-09-03
    • 1970-01-01
    • 2014-09-08
    • 2017-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多