在搭建spring mvc rest环境时遇些问题:
问题1:
当Controller返回Object时,请求json数据返回的内容和我期望的不一致,例如返回的Object是User类有个name属性,原本希望返回{"name":'姓名'}这样的数据,结果返回{"user":{"name":"姓名"}}。
问题原因:
org.springframework.web.servlet.view.json.MappingJacksonJsonView类的filterModel方法返回的是key为user的Map对象,而实际我想要的效果是直接返回User对象。
解决办法:
继承MappingJacksonJsonView类,重写filterModel方法
protected Object filterModel(Map<String, Object> model) {
Map<?, ?> result = (Map<?, ?>) super.filterModel(model);
if (result.size() == 1) {
return result.values().iterator().next();
}else{
return result;
}
}
问题2:
当Controller返回Object时,请求xml数据返回的内容和预期的不一致。Controller明明返回的是User结果xml返回的是org.springframework.validation.BindingResult对象
问题原因:
org.springframework.web.servlet.view.xml.MarshallingView类的locateToBeMarshalled方法接受的参数Map<String, Object> model里有2个对象分别是BindingResult和User,locateToBeMarshalled方法在返回时候先检索到BindingResult结果就返回了它而不是真正需要返回的User
for (Object o : model.values()) {
if (o != null && this.marshaller.supports(o.getClass())) {
return o;,
}
}
解决办法:
继承MarshallingView类重写locateToBeMarshalled方法,由于MarshallingView类没有提供marshaller,和modelKey的get方法,所以还要重写这2个属性相关的内容,完整代码如下
public class MarshallingView extends org.springframework.web.servlet.view.xml.MarshallingView{
private Marshaller marshaller;
private String modelKey;
public Marshaller getMarshaller() {
return marshaller;
}
public String getModelKey() {
return modelKey;
}
public MarshallingView() {
super();
}
public MarshallingView(Marshaller marshaller) {
super(marshaller);
this.marshaller = marshaller;
}
@Override
public void setMarshaller(Marshaller marshaller) {
super.setMarshaller(marshaller);
this.marshaller = marshaller;
}
@Override
public void setModelKey(String modelKey) {
super.setModelKey(modelKey);
this.modelKey = modelKey;
}
@Override
protected Object locateToBeMarshalled(Map<String, Object> model) throws ServletException {
if (this.getModelKey() != null) {
Object o = model.get(this.getModelKey());
if (o == null) {
throw new ServletException("Model contains no object with key [" + modelKey + "]");
}
if (!this.getMarshaller().supports(o.getClass())) {
throw new ServletException("Model object [" + o + "] retrieved via key [" + modelKey +
"] is not supported by the Marshaller");
}
return o;
}
for (Object o : model.values()) {
if (o != null && !(o instanceof BindingResult) && this.getMarshaller().supports(o.getClass())) {
return o;
}
}
return null;
}
}
其实关键的修改只有
!(o instanceof BindingResult)
这一句,在返回时候跳过BindingResult类。
分享到:
相关推荐
该实例展示了 spring3 REST 的使用方法,以及同一种内容,多种不同方式展示的实现,例如同一 User 信息,可以展示为:xml,json,html三种不同的格式。可以参考这篇文章:http://badqiu.javaeye.com/blog/552806
Spring MVC - REST Web 服务 对于相同的域对象,RestController 通过接受 application/json 或 application/xml 生成相应的响应。 设置标题 接受:application/json,或 接受:应用程序/xml 并将 GET 请求发送到
《Spring MVC 3.0实战指南》,参考《Spring 3.x企业应用开发实战》。 内容简介: 1、Spring MVC框架简介 2、HTTP请求地址映射 3、HTTP请求数据的绑定 4、数据转换、格式化、校验 5、数据模型控制 6、视图及解析器 7...
您可以直接与基于呈现技术的模板 (如 JSP、 Velocity和 Freemarker )集成或直接生成 XML、 JSON、 Atom和许多其他类型的内容。模型map被转化为合适的格式,如JSP request attributes或是 Velocity template model。
《Spring MVC 3.0实战指南》,参考《Spring 3.x企业应用开发实战》。 内容简介: 1、Spring MVC框架简介 2、HTTP请求地址映射 3、HTTP请求数据的绑定 4、数据转换、格式化、校验 5、数据模型控制 6、视图及...
完成了一个名为HplussApp的String MVC应用程序,可帮助您在公司的库存中查找产品。... 前端:JSP,CSS,Spring表单标签。后端:Java,SpringBoot,Spring MVC,JPA,Hibernate。... Spring MVC REST控制器。
本文主要介绍使用注解方式配置的spring mvc,之前写的spring3.0 mvc和rest小例子没有介绍到数据层的内容,现在这一篇补上。下面开始贴代码。 文中用的框架版本:spring 3,hibernate 3,没有的,自己上网下。 先说...
9.4 用REST服务发布JSON 372 9.4.1 问题 372 9.4.2 解决方案 372 9.4.3 工作原理 372 9.5 访问具有复杂XML响应的REST服务 375 9.5.1 问题 375 9.5.2 解决方案 375 9.5.3 工作原理 375 9.6 小结 ...
9.4 用REST服务发布JSON 372 9.4.1 问题 372 9.4.2 解决方案 372 9.4.3 工作原理 372 9.5 访问具有复杂XML响应的REST服务 375 9.5.1 问题 375 9.5.2 解决方案 375 9.5.3 工作原理 375 9.6 小结 ...
springMVC spring mybatis rest风格架构 根据请求的后缀名 解析成json 或者 xml格式的数据
Spring MVC + REST + Spring Data JPA + Hibernate 为跨域资源共享(CORS)添加了CORSFilter,从其他服务器访问Service Server。 添加了对 JSON + XML 的响应支持,根据请求类型和接受标头值。
简单的Spring Rest MVC示例,以演示一个简单的bookservice示例,该示例允许通过Rest EndPoints获取和添加书籍。 本示例可以基于客户端的Accept-Header生成JSON或XML。 项目打包是war文件。 要运行此程序,请部署到...
Build lightning-fast web applications and REST APIs using Spring MVC and its asynchronous processing capabilities with the view technologies of your choice Explore simplified but powerful data access ...
Spring MVC Restful 基础搭建 ,主要包括:采用 GET POST PUT DELETE 进行数据的 CRUD ,以及内容协商机制,通过不同的请求返回不同的数据格式,包括 JSON XML 以及 HTML
Auto-configured Spring REST Docs Tests with Mock MVC Auto-configured Spring REST Docs Tests with REST Assured 43.3.20. User Configuration and Slicing 43.3.21. Using Spock to Test Spring Boot ...
Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是JavaWeb应用开发的难度,同时有效提升...
使用以下应用程序的Bootstrap项目:Spring MVC + Rest Services(产生:XML,JSON)+ Velocity
report是一个开源的访问层框架,基于java平台,依赖于spring,可用于接口的调试及性能的展示,以及访问控制层的使用,简化控制层的繁琐代码,简化spring mvc的配置,替换的请求前的各个操作,重组性低,REST风格的...
弹簧休息示例 简单的 Spring Rest MVC 示例演示了一个简单的 bookservice 示例,该示例允许通过 Rest EndPoints 获取和添加书籍。 本示例可以根据客户端的 Accept-Header 生成 JSON 或 XML。
##您将学到什么使用带有Maven或Gradle的Spring Framework设置和构建独立的基于Web的项目开发用于XML和JSON数据传输的RESTful API应用程序使用Spring数据存储库研究Spring数据访问机制使用AngularJS和Bootstrap为响应...