在搭建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的编写,这里就不详说了。
相关推荐
SpringMVC基础 SpringMVC是基于MVC设计...SpringMVC是基于Servlet API的Web框架,Controller控制层可以和Servlet配合使用,但两者之间存在解耦关系,Controller可以不继承Servlet,实现了控制层和Servlet之间的解耦。
同时,描述中还提醒注意pom.xml文件中的错误引用,这可能意味着在导入依赖时可能会遇到问题,需要开发者手动检查并排除。 【标签】"cxf"指的是Apache CXF,一个用于构建和开发服务的开源框架,它支持多种Web服务...
**问题五:请介绍一下Spring框架中Bean的生命周期和作用域** - **Bean的生命周期**:主要包括创建、依赖注入、初始化、运行和销毁五个阶段。 - **Bean的作用域**:指定了bean实例的有效范围,主要有以下几种: - *...
在本项目中,“基于Java与SSM使用Idea构建的旅游网站设计实现”是一个实际的Web应用程序开发案例,它展示了如何使用Java编程语言、Spring、SpringMVC(SSM)框架以及IntelliJ IDEA集成开发环境来创建一个功能完善的...
这个毕业设计项目为学生提供了一个实际操作的机会,将理论知识应用到实践中,加深对Java Web开发的理解,提升编程技能和问题解决能力。同时,通过完成这个项目,学生也能掌握一套完整的开发流程,为未来的职业生涯...
ssmcrud 根据尚硅谷学习视频 IDEA,SSM框架写的员工增删改查 功能点• 1、分页• 2、数据校验• jquery前端校验+JSR303后端校验• 3、ajax• ...本人在编写过程中遇到的错误都写在了博客上面,欢迎查看:
1. **SpringBoot**: SpringBoot是Spring框架的简化版本,它极大地简化了配置和应用的启动过程,内置了Tomcat服务器,使得开发者可以快速地搭建一个Web应用。在这个项目中,SpringBoot负责处理后端业务逻辑,提供...
《SSM+Vue的企业员工管理系统:JavaEE项目与前端分离实践》 在现代软件开发领域,前后端分离已经成为一...同时,项目的报告部分将帮助你了解系统设计思路、遇到的问题及解决方案,对于提升软件工程实践技能大有裨益。
此外,SpringBoot还提供了其他Starter选项,如spring-boot-starter-data-jpa用于数据库访问,spring-boot-starter-data-rest用于RESTful服务,spring-boot-starter-security用于安全控制等,覆盖了开发中的多个领域...
【标题】:“基于SSM+Vue的高校就业管理系统”是一个综合性的项目,它结合了Java后端框架SSM(Spring、SpringMVC、MyBatis)与前端Vue.js技术,旨在为高校提供一个高效、便捷的就业管理平台。 【描述】:这个系统的...
这个系统旨在方便学生在遇到宿舍设施问题时,能够快速、便捷地进行报修,提升校园生活服务效率。 【描述】:该项目可能包含了一个完整的开发流程,包括前端微信小程序的界面设计与交互,以及后端服务器的搭建和接口...
本项目旨在通过开发一款基于SpringBoot框架的在线考试与学习交流网页平台,来解决传统考试信息与学习资源管理中存在的不规范性、低效性等问题。本文将详细介绍该平台的设计理念、技术栈选择以及具体功能实现。 ####...
SpringBoot是Java后端开发中的一个热门框架,由Pivotal团队开发,旨在简化Spring应用的初始搭建以及开发过程。它集成了大量常用的第三方库配置,如数据源、JPA、MVC、security、Actuator等,使得开发者可以快速地...
然而,现有的平台往往存在用户体验不佳、功能不完善等问题。因此,本项目应运而生,其核心目标是: - **解决痛点**:提高学习资源获取效率,增强学习体验。 - **技术选型**:采用Java语言和Spring Boot框架构建系统...
项目中遇到的问题.avi │ 13.quartz.avi │ aa.quartz框架.avi │ 淘淘商城第十二天笔记.docx │ ├─补充1:拔高课程(Redis3.0持久化、集群、MySQL5.6优化、Tomcat7优化) │ │ 打开必读.txt │ │ │ ├─课前...
4. SpringBoot:简化了Spring应用的初始搭建以及开发过程,通过内嵌Servlet容器,可以快速创建独立的、生产级别的基于Spring的应用。 5. Vue.js:是一款轻量级的前端MVVM框架,它以数据驱动和组件化的思想,使得构建...
Spring Boot简化了Spring应用的初始搭建以及开发过程,通常用于构建微服务或单体应用。 【描述】提到"html5开发",这意味着项目可能涉及到HTML5的使用,HTML5是超文本标记语言的最新版本,提供了许多增强功能,如更...
- **SSM**: 即Spring + SpringMVC + MyBatis框架组合,是Java Web开发的一种经典组合,虽然Spring Boot可以简化配置,但SSM框架依然被许多开发者所喜爱。 - **JSP**: Java Server Pages是一种基于Java Servlet以及...