`
LoveLZY
  • 浏览: 57374 次
  • 性别: Icon_minigender_1
博客专栏
Group-logo
从零编写RPC框架
浏览量:0
社区版块
存档分类
最新评论

spring4整合rest风格配置

阅读更多
    最近手头上有个新项目,打算采用前端js渲染+后端调用restful风格api获取数据。于是决定把之前一个项目的springMVC改造成符合restful风格的框架。找了很多资料,也遇到不少坑,下面把相关心得整理下。
    很多人以为resutful是一种标准,要按照什么标准才行,其实restful是一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件。说白了它就是个风格,所有的软件框架设计都是为了提升效率,而不是死板的标准。
    1 配置web.xml
    	<filter>
        <filter-name>HttpMethodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>HttpMethodFilter</filter-name>
        <url-pattern>*.json</url-pattern>
    </filter-mapping>
     <filter-mapping>
        <filter-name>HttpMethodFilter</filter-name>
        <url-pattern>*.xml</url-pattern>
    </filter-mapping>
     <filter-mapping>
        <filter-name>HttpMethodFilter</filter-name>
        <url-pattern>*.htm</url-pattern>
    </filter-mapping>


    restful风格是面向资源,http1.1协议天生自带get(查询),post(创建),put("修改"),delete("删除")4种请求方式,但是因为部分浏览器ajax和表单提交只支持get和post,该filter就是用于实现put和delete提交请求。
    	<form action="demo/test.json">
		<input type="hidden" name="method" value="put">

	</form>

    2.添加springMVC配置,因为上一个项目是采用velocity模板渲染页面,因此也保留了对velocity模板渲染的
     <!-- velocity config -->
    <bean id="velocityConfigurer" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
    	<property name="configLocation"><value>classpath:velocity.properties</value></property>   
        <property name="resourceLoaderPath">
            <value>view</value>
        </property>
        <property name="velocityProperties">
            <props>
                <prop key="input.encoding">UTF-8</prop>
                <prop key="output.encoding">UTF-8</prop>
                <prop key="contentType">text/html;charset=UTF-8</prop>
                <prop key="velocimacro.library">macro/macros.vm</prop>
            </props>
        </property>
    </bean>

	<bean id="VelocityViewResolver"
        class="org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver">
        <property name="order" value="2" />
        <property name="viewClass"
            value="com.lyun.web.servlet.view.velocity.CspVelocityLayoutView">
        </property>
<!--       是否缓存模板   -->
        <property name="cache" value="false" />
        <property name="contentType" value="text/html;charset=UTF-8"></property>
<!--       	是否使用spring对宏定义的支持 -->
        <property name="exposeSpringMacroHelpers" value="true"></property>
        <property name="prefix" value=""></property>
        <property name="suffix" value=".vm"></property>
<!--        toolbox配置文件路径  -->
        <property name="toolboxConfigLocation"
            value="/WEB-INF/toolbox.xml">
        </property>
        <property name="layoutUrl" value="layout/default.vm"></property>
        <property name="layoutKey" value="layout"></property>
        <property name="screenContentKey" value="screen_content"></property>
    </bean> 
    <!-- 根据客户端的不同的请求决定不同的view进行响应, 如 /blog/1.json /blog/1.xml -->  
    <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">  
    	<property name="order" value="1" />
        <!-- 设置为true以忽略对Accept Header的支持 -->  
        <property name="ignoreAcceptHeader" value="true" />  
          
        <!-- 在没有扩展名时即: "/blog/1" 时的默认展现形式 -->  
        <property name="defaultContentType" value="text/html" />  
  
        <!-- 扩展名至mimeType的映射,即 /blog.json => application/json -->  
        <property name="mediaTypes">  
            <map>  
                <entry key="html" value="text/html" />  
                <entry key="pdf" value="application/pdf" />  
                <entry key="xsl" value="application/vnd.ms-excel" />  
                <entry key="xml" value="application/xml" />  
                <entry key="json" value="application/json" />  
            </map>  
        </property>  
      
        <!-- 用于开启 /blog/123?format=json 的支持 -->  
        <property name="favorParameter" value="false" />  
        <property name="viewResolvers">  
            <list>  
                <bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />  
      <!--           <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
                    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />  
                    <property name="prefix" value="/pages" />  
                    <property name="suffix" value=".jsp"></property>  
                </bean>   -->
            </list>  
        </property>  
        <property name="defaultViews">  
            <list>  
                <!-- for application/json -->  
                <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />  
                <!-- for application/xml -->  
                
                <bean class="org.springframework.web.servlet.view.xml.MarshallingView">   
                    <property name="marshaller">   
                        <bean class="org.springframework.oxm.xstream.XStreamMarshaller">
                        	
                        </bean>
                    </property>   
                </bean>   
                
            </list>  
        </property>  
    </bean> 
  


    3controller演示
   @RequestMapping(value = "/test", method = RequestMethod.POST)
	@ResponseStatus(HttpStatus.CREATED)
	// 201
	public UserDetails createUser() {

		UserDetails userDetails = new UserDetails();
		userDetails.setUserName("Krishna");
		userDetails.setEmailId("krishna@gmail.com");
		userDetails.setBirthday(new Date());
		return userDetails; // json
	}

	@RequestMapping(value = "/test", method = RequestMethod.PUT)
	// 205
	@ResponseStatus(HttpStatus.RESET_CONTENT)
	public UserDetails updateUser() {
		UserDetails userDetails = new UserDetails();
		userDetails.setUserName("Krishna");
		userDetails.setEmailId("krishna@gmail.com");
		userDetails.setBirthday(new Date());
		return userDetails;
	}






   
分享到:
评论

相关推荐

    mavin spring4 mvc mybatis 整合 带事务,REST风格

    【标题】"mavin spring4 mvc mybatis 整合 带事务,REST风格" 涉及到的是一个基于Java技术栈的Web应用程序开发,整合了Maven、Spring4 MVC、MyBatis框架,并且实现了RESTful API设计以及事务管理。下面将对这些关键...

    mavin spring4 mvc mybatis 整合 带REST风格

    【标题】"mavin spring4 mvc mybatis 整合 带REST风格"涉及到的知识点主要涵盖了Java Web开发中的三大核心框架:Maven、Spring 4 MVC以及MyBatis,以及RESTful服务的设计和实现。以下是这些技术的详细介绍: 1. ...

    SpringMVC-REST风格和SSM整合(注解版)彩色PPT版本.pptx

    REST风格简介 2、RESTful入门案例 入门案例 请求方法设定 请求路径参数 3、REST快速开发 RESTful快速开发(标准开发) @RestController 标准请求动作映射(4种) 4、案例:基于RESTful页面数据交互 5、SSM整合 ...

    ssm框架整合及Rest风格接口实现

    SSM框架整合及Rest风格接口实现涉及到的技术领域主要包括Spring、SpringMVC、Mybatis三大流行Java框架的整合以及基于RESTful风格的接口设计与实现。 首先,Spring、SpringMVC、Mybatis是Java后端开发中经常组合使用...

    rest+spring+hibernate

    4. **Spring事务管理**:Spring的Transaction Management提供了声明式事务管理,通过@Transactional注解在方法级别控制事务边界。当发生异常时,Spring会自动回滚事务,确保数据的一致性。 5. **O2O_v1.0**:这个...

    Spring整合CXF,发布RSETful 风格WebService

    首先,让我们回顾一下Spring整合CXF的基础步骤。在SSH(Spring、Struts、Hibernate)架构中,我们需要配置Spring上下文以便CXF能够识别和处理Web服务。这通常涉及到在Spring配置文件中定义CXF的Bus实例、服务端点...

    springboot与ssm项目构建(rest风格)

    本项目着重讲解如何结合Spring Boot和SSM来构建REST风格的Web服务。下面我们将深入探讨相关知识点。 首先,**Spring Boot** 是Spring框架的延伸,它简化了传统Spring应用的配置,通过内嵌的Tomcat服务器和自动配置...

    ExtJS5 整合Spring4之二

    标题 "ExtJS5 整合Spring4之二" 暗示了这是一个关于将流行的JavaScript框架ExtJS5与Java后端框架Spring4集成的主题。在Web应用开发中,这种集成允许开发者利用ExtJS5的富客户端功能和Spring4的强大后端服务。下面将...

    CXF整合spring的客户端和服务端

    将CXF与Spring整合,可以充分利用Spring的管理能力,简化服务的创建和维护。 1. **整合步骤** - **配置Spring**:首先,我们需要在Spring配置文件中定义CXF的相关bean,如服务接口的实现类、服务端点、服务发布器...

    cxf+spring发布webservice和restservice

    REST是一种轻量级的架构风格,主要用于互联网应用。它强调资源的表示和操作,通常使用HTTP协议中的GET、POST、PUT和DELETE等方法。CXF同样支持REST服务的开发,你可以使用JAX-RS(Java API for RESTful Web Services...

    Spring4 Hibernate4 jersey项目源码

    本篇文章将深入探讨一个基于Spring4、Hibernate4和Jersey实现的rest风格系统的源码,揭示其设计思想和技术细节。 首先,Spring4作为Java企业级应用的主流框架,以其灵活的依赖注入(DI)和面向切面编程(AOP)为...

    SpringMVC4.2 开发Rest接口

    REST是一种架构风格,用于构建可伸缩、易于理解的分布式系统,强调通过HTTP协议进行数据交换。SpringMVC作为Spring框架的一部分,提供了一种强大的方式来实现REST接口。 在SpringMVC 4.2中,开发者可以利用一系列的...

    spring4MVC+Hibernate4实例(增删改查)

    以上就是"spring4MVC+Hibernate4实例(增删改查)"中的主要技术点,这个实例为初学者提供了学习Spring MVC和Hibernate整合的实践平台,并且通过REST风格实现了Web服务。通过理解和实践这些概念,开发者可以更好地...

    rest+spring+webservice交互xml文件

    然而,本文将探讨的是如何在Spring框架中整合REST服务,并通过XML数据格式进行交互。 首先,整合REST和Spring的关键在于引入相应的依赖库。在MyEclipse中,你可以通过“Add REST Web Service Capabilities”来添加...

    S2SH+rest注解配置实例

    在这个"**S2SH+rest注解配置实例**"中,我们主要关注的是Spring、Struts2(S2)、Hibernate(H)这三大框架的整合,以及RESTful服务的添加和全注解配置。下面将详细介绍这些知识点。 首先,**S2SH**是Java Web开发...

    springboot集成mybatis+rest接口提供+文件访问自定义配置

    在本项目中,"springboot集成mybatis+rest接口提供+文件访问自定义配置"是一个典型的企业级开发示例,旨在帮助初学者理解和实践Spring Boot与MyBatis的整合,以及如何通过RESTful接口提供服务,并自定义文件访问配置...

    Java+SpringMvc+mybatis+RestAPI,整合swagger

    RestAPI是基于REST(Representational State Transfer)架构约束的Web服务设计风格,通常用于创建无状态、可缓存、分布式的网络应用。使用HTTP方法如GET、POST、PUT和DELETE来操作资源,易于理解和实现。 Swagger是...

    利用spring整合jersey和Protobuf,搭建REST web服务

    3. 集成Spring和Jersey:配置Spring容器,创建Jersey资源类,使用注解定义REST端点。 4. 实现业务逻辑:在资源类中处理请求,使用Protobuf进行数据序列化和反序列化。 5. 创建Python客户端:导入Python的protobuf库...

    spring整合cxf服务

    下面将详细介绍如何在 Spring 环境中整合 CXF,实现 REST 风格的服务。 ### 1. 准备工作 在整合 Spring 和 CXF 之前,确保已安装了必要的软件,如 JDK、Maven 或者 Gradle 作为构建工具,以及集成开发环境(如 ...

Global site tag (gtag.js) - Google Analytics