Spring 4 Webservice HTTP 500 - IllegalStateException:映射的控制器方法类不是实际控制器bean的实例

时间:2014-06-05 10:57:16

标签: java spring web-services hibernate cloudbees

所以我正在研究一个学校项目,我正在尝试构建一个JSON Rest Webservice应用程序。我正在使用Spring 4和Hibernate 4与Jackson 2。

我在这个应用程序上遇到了很多困难,但现在我遇到了一个问题,我无法克服。我正在使用 Cloudbees作为我的云服务提供商和不时(这很重要,因为它有时可以工作,有时候不行!)我收到HTTP 500错误:/。 最好的部分是 - 我从来没有在当地使用它。

这或多或少是这样的:

  

HTTP状态500 - 请求处理失败;嵌套异常是java.lang.IllegalStateException:映射的控制器方法类'pl.lodz.pp.controllers.crud.impl.UserController'不是实际控制器bean实例'com.sun.proxy。$ Proxy47'的实例。如果控制器需要代理(例如由于@Transactional),请使用基于类的代理。

我很困惑。我从来没有在本地得到这个,通常如果我在云上重启应用程序(一次或多次),它将再次工作一段时间。

我犯了一些错误,比如

@Autowire
private ClassType variable 

而不是

@Autowire
private ClassInterface variable 

但是我把它们全部修好了。 我不再使用@Transactional注释了。至少不在我的课堂上。也许GenericDao把它放在某个地方(https://code.google.com/p/hibernate-generic-dao/),但我之前从未遇到过这个问题。


交易管理:

<bean id="transactionManager"
   class="org.springframework.orm.hibernate4.HibernateTransactionManager">
   <property name="sessionFactory" ref="sessionFactory" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager" />

请在此处找到完整代码: https://github.com/atais/PP-JSON


底线 我没有使用@Transactional,我用Interface类型注入了所有内容。那么我可能做错了什么?什么是最好的 - 它有时有效,但有时我得到这个错误:/

3 个答案:

答案 0 :(得分:4)

您唯一需要做的就是添加

@EnableAspectJAutoProxy(proxyTargetClass = true)

到你的Spring配置。

答案 1 :(得分:1)

在许多情况下,框架会为您的类应用一些代理机制:TX,Cache,Async等 - 取决于您在类或其方法上使用的注释。

因此,最好为这些类接口引入并使用该合同,而不是类。

我理解它看起来像所有@Service类的开销,但至少为使用某些AOP aspects

的类引入接口

答案 2 :(得分:0)

当我在控制器中实现了一个接口(控制器扩展x实现接口)时,我遇到了同样的异常。删除接口解决了问题。我怀疑控制器不支持实现特定的接口。