所以我正在研究一个学校项目,我正在尝试构建一个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类型注入了所有内容。那么我可能做错了什么?什么是最好的 - 它有时有效,但有时我得到这个错误:/
答案 0 :(得分:4)
您唯一需要做的就是添加
@EnableAspectJAutoProxy(proxyTargetClass = true)
到你的Spring配置。
答案 1 :(得分:1)
在许多情况下,框架会为您的类应用一些代理机制:TX,Cache,Async等 - 取决于您在类或其方法上使用的注释。
因此,最好为这些类接口引入并使用该合同,而不是类。
我理解它看起来像所有@Service
类的开销,但至少为使用某些AOP aspects
答案 2 :(得分:0)
当我在控制器中实现了一个接口(控制器扩展x实现接口)时,我遇到了同样的异常。删除接口解决了问题。我怀疑控制器不支持实现特定的接口。