在搭建springmvc的rest框架的过程中遇到了很多问题,终于算是解决了。
用的是spring3+mybatis3,换成hibernate也差不多。 主要的配置网上很多,在这里参照了rapidframework里面的demo
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"></bean>
一开始,只是支持text/html和application/json都没问题,当加上了application/xml就碰到了很多问题
代码
按照spring的reference,先用了xstreamMarshaller来解决beantoxml
1:使用xstream的bean转xml,格式有问题
执行了rapidframework的那个demo,bean转xml是正常的,到了我这里怎么老是有问题,类的名字一长串,还包含$$enhanced_cglib 字样
于是查找原因,结果因为rapid的demo里使用了自己封装过的ibatis3,而我使用了mybatis以及mybatis-spring,取出来的bean都是cglib的代理类,转成xml后,里面都包含$$enhanced_cglib 这样的类,怎么都去不掉。
网上查找了下,发现使用hibernate存在同样的问题,但xstream没有很好的解决方案。
另一个不使用xstream的原因是,无法对生成的xml进行定制,虽然可以在bean上进行annotation标注,但我不希望bean中带入xstream的东西。
于是,改使用另一个beantoxml的工具 castorMarshaller,他定制xml的方式还行。但发现转成xml是同样的问题,无法正确识别cglib,而且更夸张。
解决办法一:在spring的org.springframework.web.servlet.view.xml.MarshallingView中修改bean类,把cglib代理类处理成其父类,即原始的bean。
结果:面对bean是没问题了,但如果是collection或者这个bean的属性里有collection,这样处理太麻烦了,效率也很低。
解决办法二:改用ibatis2,这个当然没问题了,作为一个版本使用吧。
解决办法三:看看castor有没有解决办法,官网上一搜,果然有
2.使用castorMarshaller处理beantoxml
(使用的是castor-xml的1.3.1版本)
在src目录创建castor.properties,里面加入如下内容:
org.exolab.castor.xml.proxyInterfaces = net.sf.cglib.proxy.Factory, org.hibernate.proxy.HibernateProxy
但是按照官网设置,死活不起作用。于是就debug源代码,发现源代码果然有bug:配置文件读取进来了,但是类里面的proxyInterfaces始终没有被赋值。
网上继续搜这个问题,答案在这里http://jira.codehaus.org/browse/CASTOR-2880
按照这个说法,要么这么调用
Marshaller m = context.createMarshaller();
m.setInternalContext(m.getInternalContext());
但我是spring配置的,不好这么做,
要么把里面的补丁弄下来,试了下,没弄好,也没更多的时间花在这个上面研究。
网上找了资料,老外说1.2版本解决代理类的问题是好的,到了1.3.1反而不行了。。。看来老外的测试也做得不咋样
哎,于是换回castor的1.2版本,普通的bean和collection的wrapper bean,一切都ok
同时也学习了一下castor对于定制xml,需要增加个mapping文件,里面包含了bean和collection的配置,以及时间等个性化convertor的编写,这里就不详说了。
相关推荐
最简单的springmvc4.0框架搭建, 绝对可以运行
springMVC+mybatis搭建框架springMVC+mybatis搭建框架
springmvc基础框架搭建,所需jar包
hibernate5.2+SpringMVC4.3框架搭建源码。
Spring SpringMVC mybatis框架搭建所需jar包Spring SpringMVC mybatis框架搭建所需jar包
SpringMVC完整框架搭建,使用spring3,Hibernate4搭建的demo(包括基本的工具类),下载后可直接编写自己的逻辑。
springMVC基础框架搭建,非常适合初学者学习
SpringMVC 入门浅谈,环境搭建例子工程! 详情请看:http://blog.csdn.net/zxw136511485/article/details/52583337
springmvc框架搭建,框架已经搭建完成,用注解的方式。
Spring SpringMVC Mybatis框架搭建所需jar包.zip
创建maven项目,由maven项目转变成javaweb项目,内涵Servlet+SpringMVC的基本框架,上传资源之所以设置1分分值是因为楼主本身也需要从其它地方下载资源,亦需要支付积分,请见谅.
整合Spring SpringMvc Mybatis,搭建SSM框架所用到jar包;整合Spring SpringMvc Mybatis,搭建SSM框架所用到jar包;
简单springMVC增删改查,及jsp页面,适合初学者参考,使用技术为java,springMVC+MyBeatis+Spring
SpringMVC框架搭建及详解.pdf
springMVC简单框架
自己整合的一套架构,省了找资源,后期会上个更完整的,带有系统功能的。
springMVC mybatis框架搭建,采用注解方式。提供junit测试。
代码都有注释,也有数据库文件,下载后即可直接使用,已经过测试
springMVC框架搭建及详解
学习springMVC框架搭建的可以看一看。