`

Spring MVC REST内容协商(同一资源,多种展现方式,html、xml、json等,通过ContentNegotiatingViewResolver)

 
阅读更多

突然对ruby on rails来了兴趣,便捣弄了两天,用脚手架做了个hello world,实质上也就是一行命令的事,的确够效率。看一下Controller,其REST风格实在太简洁了。

 

  # GET /posts
  # GET /posts.json
  def index
    @posts = Post.all

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @posts }
    end
  end

 一直在关注着spring,如今一般的web项目,从前到后几乎可以用spring直接搞定了。因此,对spring mvc及REST相关内容自然也有所了解。

 

 

于是今天就在想,spring mvc应该也可以对同一资源,实现多种展现才是,前提当然是在同一个方法里。(之前是为json的处理单独写一个Controller的method的,倒也没什么问题。)

就如以下:

 

@RequestMapping(value={"/user/{id}","/user/{id}.json"})
	public ModelAndView show(@PathVariable(value="id")String id){
		User user=userService.get(Long.valueOf(id));
		ModelAndView mav=new ModelAndView("show");
		mav.addObject(user);
		return mav;
	}

 

 当我请求/user/1时,便会回应show的视图,当我请求/user/{id}.json时,便会回应json格式的数据。

 

而spring mvc中ContentNegotiatingViewResolver便能满足这个需求,除了json,还有xml/rss。

 

相关资讯可查看这里(里面还对RESTful中同一资源多种表述进行描述的三种方式进行了讨论。)。

我当前使用spring版本是3.2,在这个版本里,对ContentNegotiatingViewResolver作了修改,原样参照以上链接配置,出现java.lang.ClassCastException: java.lang.String cannot be cast to org.springframework.http.MediaType 的异常。版本原因造成这个问题。

在springsource的论坛里有人询问和解答,请看这里或者这里

 

起作用的配置,例:

 

<!-- REST -->
    <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
        <property name="order" value="1" />
        <property name="contentNegotiationManager">
            <bean class="org.springframework.web.accept.ContentNegotiationManager">
                <constructor-arg>
                    <bean class="org.springframework.web.accept.PathExtensionContentNegotiationStrategy">
                        <constructor-arg>
                            <map>
                                <entry key="json" value="application/json"/>
                                <entry key="xml" value="application/xml"/>
                            </map>
                        </constructor-arg>
                    </bean>
                </constructor-arg>
            </bean>
        </property>


        <property name="defaultViews">
            <list>
                <!-- JSON View -->
                <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />

                <!-- XML View -->
                <bean class="org.springframework.web.servlet.view.xml.MarshallingView">
                    <constructor-arg>
                        <bean class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
                            <property name="packagesToScan">
                                <list>
                                    <value>documentLoader.domain</value>
                                </list>
                            </property>
                        </bean>
                    </constructor-arg>
                </bean>
            </list>
        </property>
    </bean>

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>
仅作小记,如果刚好对他人有用就更好了。
分享到:
评论
1 楼 zbd0518 2013-07-09  
非常感谢,刚好有用!

相关推荐

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

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

    spring mvc rest基础学习demo

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

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

    除了基础的REST和静态资源处理,Spring MVC还支持数据绑定、参数验证、异常处理、视图解析等多个方面。数据绑定允许我们自动将HTTP请求参数绑定到Controller方法的参数,如`@RequestParam`和`@PathVariable`。参数...

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

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

    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-rest.rar_DEMO_employeeDS.java_rest spring mvc_spring mvc_

    总之,`spring-rest.rar`提供的DEMO展示了如何使用Spring MVC构建RESTful API,通过`employeeDS.java`处理数据服务,`EmployeeController`负责处理HTTP请求,实现对员工资源的增删改查操作。这为我们提供了一种结构...

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

    在IT行业中,构建RESTful服务...总结一下,通过CXF 2.6与Spring的集成,我们可以轻松地创建REST服务并支持多种数据格式的输出,如XML和JSON。这使得我们的应用程序更具有灵活性和互操作性,符合现代Web服务的设计原则。

    spring mvc restful service

    在Spring MVC RESTful服务中,我们需要在`pom.xml`文件中定义Spring MVC、Jackson(处理JSON)和JAXB(处理XML)等依赖。 5. **项目结构**:一个典型的Spring MVC Maven项目结构包括`src/main/java`(存放源代码)...

    精通Spring MVC4

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

    spring3.0 mvc和rest入门例子

    在压缩包文件"spring3_rest"中,可能包含了一个简单的Spring 3.0 MVC和REST的例子,你可以通过这个例子学习如何配置Spring MVC的DispatcherServlet,创建RESTful端点,处理请求和响应,以及如何使用JUnit进行测试。...

    Spring mvc5.0.3 所有jar包

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

    spring mvc 3.2 rest配置 文件

    Spring MVC是Spring框架的一个模块,专门用于构建Web应用程序。在Spring MVC 3.2中,引入了对RESTful服务的良好支持,使得开发基于HTTP的、无状态的服务变得更加简单。REST(Representational State Transfer)是一...

    spring mvc集成webservice

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

    Spring MVC Cookbook(PACKT,2016).pdf

    2. **配置Spring MVC**:学习如何通过XML或Java配置来设置Spring MVC环境,包括servlet配置、组件扫描、MVC注解驱动等。 3. **Controller处理请求**:掌握@RequestBody、@RequestParam、@PathVariable等注解的用法...

    SPRING-MVC-MQ-CXF-REST_Demo

    在Spring框架中,可以通过Spring MVC的@RestController注解和@RequestMapping等注解轻松实现RESTful API的开发,提供JSON、XML等数据格式的接口。 【Demo项目结构】 "SPRING-MVC-MQ-CXF-REST_Demo"这个项目很可能是...

    spring mvc

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

    使用Spring MVC 搭建Rest服务.doc

    以下是一个简单的Spring MVC REST服务示例,展示了如何处理学生资源: ```java import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; @Controller @...

    eclipse + maven多模块项目 + SpringMVC + jetty热部署实现验证码图片实例源码

    并且基于Spring MVC提供了一个完整功能:实现了生成验证码图片,以及验证输入是否匹配的两个接口,接口为Rest风格,符合内容协商原则(同一资源,多种展现:xml,json,html)。 另外,演示了注解(Annotation)的用法,实现...

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

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

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

    《精通Spring MVC 4:看透SpringMVC》是一本深度解析Spring MVC框架的专业书籍,旨在帮助读者全面理解和掌握Spring MVC 4的核心概念和技术。Spring MVC是Spring框架的一部分,专门用于构建Web应用程序,它提供了模型...

Global site tag (gtag.js) - Google Analytics