`

搭建spring mvc rest返回json,xml遇到的问题,及解决办法

    博客分类:
  • java
 
阅读更多

      在搭建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类。

 

分享到:
评论
1 楼 chenhuiaigo 2012-07-25  
[b][/b]
[url][/url]

相关推荐

    spring mvc rest基础学习demo

    在"spring mvc rest基础学习demo"中,我们将深入探讨如何使用Spring MVC构建RESTful API。 REST(Representational State Transfer,表现层状态转移)是一种网络应用程序的设计风格和开发方式,基于HTTP协议,以...

    Spring @MVC REST 实例以及 (同一资源,多种展现:xml,json,html)

    该实例展示了 spring3 REST 的使用方法,以及同一种内容,多种不同方式展示的实现,例如同一 User 信息,可以展示为:xml,json,html三种不同的格式。可以参考这篇文章:http://badqiu.javaeye.com/blog/552806

    Spring MVC – Easy REST-Based JSON Services with @ResponseBody

    标题中的“Spring MVC – Easy REST-Based JSON Services with @ResponseBody”是指使用Spring MVC框架构建基于REST的JSON服务,并通过使用`@ResponseBody`注解来简化这一过程。REST(Representational State ...

    spring—mvc -json

    本示例提供了一个完整的返回JSON数据的接口的Spring MVC Demo,帮助开发者理解如何在Spring MVC应用中实现JSON序列化和反序列化。 首先,我们需要了解JSON的基本结构。JSON是一种轻量级的数据交换格式,它基于...

    使用Spring MVC创建REST服务简单例子

    本教程将通过一个简单的例子,讲解如何利用Spring MVC创建REST服务。 首先,我们需要在项目中引入Spring MVC的相关依赖。通常,这涉及到在Maven或Gradle的配置文件中添加Spring Web和Spring MVC的依赖。例如,如果...

    使用Spring MVC 搭建Rest服务.doc

    总结来说,使用Spring MVC搭建REST服务涉及以下几个步骤: 1. 设计RESTful API,定义URI和HTTP方法。 2. 创建数据模型和相应的Java Bean。 3. 编写控制器类,使用`@Controller`、`@RequestMapping`等注解处理HTTP...

    CXF2.6 spring 提供rest服务输出xml或json等格式数据

    本文将详细探讨如何使用CXF 2.6版本与Spring框架结合,来提供REST服务并输出XML或JSON格式的数据。 首先,我们需要理解CXF的核心概念。CXF全称是Camel eXtended for Web Services,它提供了全面的Web服务实现,包括...

    spring-rest.rar_DEMO_employeeDS.java_rest spring mvc_spring mvc_

    在本示例中,我们将深入探讨如何利用Spring MVC框架构建RESTful API,主要涉及`employeeDS.java`这个可能的数据服务类以及与`rest_spring_mvc`、`spring_mvc`和`spring_rest`相关的概念。`spring-rest.rar`是一个...

    spring mvc restful service

    在本文中,我们将深入探讨如何利用Spring MVC创建RESTful服务,这些服务可以处理字符串、JSON和XML数据,并且是用Maven构建的。我们将讨论关键概念、配置、以及如何构建可直接运行的项目。 1. **RESTful服务**:...

    spring mvc 3.2 rest配置 文件

    1. **View Resolver** - 这个组件负责解析视图,对于REST服务,通常不需要返回视图,而是返回JSON或XML格式的数据。你可以配置`InternalResourceViewResolver`并禁用视图解析,以确保返回纯数据。 ```xml ...

    精通Spring MVC4

    Spring MVC通过@RequestMapping的produces和consumes属性,以及@Consumes和@Produces注解,支持构建符合REST原则的服务,能够处理JSON、XML等多种内容类型。 11. **模板引擎集成** Spring MVC可以轻松地与各种...

    Spring mvc5.0.3 所有jar包

    14. **MessageConverter**: Spring MVC使用MessageConverter处理HTTP请求和响应的转换,支持JSON、XML等多种格式。 15. **模板引擎**: Spring MVC支持多种模板引擎,如FreeMarker、Thymeleaf等,这些引擎可以将模型...

    精通spring mvc 4 看透springmvc pdf 高清完全版

    本书首先介绍了Spring MVC的基础知识,包括如何搭建Spring MVC环境,以及它的核心组件如DispatcherServlet、ModelAndView、HandlerMapping和HandlerAdapter等的工作原理。这些组件在Web请求处理过程中扮演着重要角色...

    spring3.0 mvc和rest入门例子

    Spring 3.0 MVC 和 REST 是 Java Web 开发中的重要组成部分,它们为构建现代、高效的应用程序提供了强大的框架支持。本文将深入探讨这两个概念以及如何通过一个入门实例来理解它们。 Spring MVC(Model-View-...

    使用Spring4 MVC 构建RESTful服务器,输出JSON格式的数据结构

    Spring4 MVC作为Java领域最流行的MVC框架之一,提供了一流的支持来构建RESTful API,尤其适合输出JSON格式的数据结构。本文将深入探讨如何使用Spring4 MVC实现这一目标。 首先,理解REST(Representational State ...

    第四章 Spring MVC Rest风格的url、静态资源标签

    如果需要返回JSON或XML数据,可以使用`@ResponseBody`结合`@JsonView`或`@XmlRootElement`注解。 总的来说,Spring MVC在实现RESTful服务和管理静态资源方面提供了强大的工具和灵活性。开发者可以根据项目需求进行...

    spring mvc集成webservice

    Spring MVC 是一个强大的Java Web开发框架,用于构建可维护、高性能的Web应用程序。而Web服务是一种基于开放标准的,使得不同系统之间能够相互通信的技术。在本示例中,我们将探讨如何将Spring MVC与Web服务(特别是...

    spring mvc

    11. **MVC配置**: 传统的XML配置方式逐渐被Java-based配置和注解配置取代,简化了配置过程,使得Spring MVC应用更易维护。 12. **RESTful风格**: Spring MVC 支持创建RESTful API,通过@RequestMapping配合HTTP动词...

    springmvc+rest+json交互+接口

    在现代Web开发中,Spring MVC框架与RESTful API和JSON数据格式的结合是常见的实践,它们为构建高效、可伸缩的分布式系统提供了强大的工具。本文将深入探讨如何使用Spring MVC来实现RESTful服务,并通过JSON进行数据...

    springmvc+velocity+ Rest Services(xml,json)实例

    **Spring MVC + Velocity + REST Services (XML, JSON) 实例详解** 在当今的Web开发领域,Spring MVC、Velocity和RESTful服务是常见的技术栈。这个实例项目是一个基于Maven构建的无数据库操作的轻量级Web应用,它...

Global site tag (gtag.js) - Google Analytics