- 浏览: 123016 次
文章分类
- 全部博客 (121)
- confluence (1)
- android (77)
- PHP (6)
- java (21)
- mysql (3)
- dos (1)
- 传感器 (2)
- 获取电话薄信息 (3)
- 正则表达式 (1)
- 网络 (1)
- 蓝牙 (1)
- 图片 (4)
- intent (3)
- 注意 (1)
- eclipce (1)
- plugins (1)
- dialog (4)
- zip (1)
- sd卡 (1)
- ui (1)
- Camera (1)
- draw (1)
- activity (2)
- launchMode (1)
- 安全 (1)
- Button (1)
- ImageTextButton (1)
- paint (1)
- network (1)
- popupwindow (1)
- jquery (1)
- ant (1)
- notifaction (1)
- Rating (1)
- ListView (3)
- editText (1)
- doc (1)
- jdk (1)
- animation (1)
- sign (1)
- 签名 (1)
- 广播 (1)
- textview (4)
- 删除线 (1)
- 城市列表 (1)
- IDE (1)
- Eclipse (1)
- pixels (2)
- px (1)
- 静默安装 (1)
- Android截屏 (1)
- eclipcetheme (1)
- scroll (1)
- ActivityGroup (1)
- sqlite (1)
- webview (3)
- PullToRefreshListView (1)
- cache (1)
- java引用 (1)
- 命名空间 (1)
- httpClient (1)
- 开源控件 (0)
- sms (1)
- 文字水平滚动 (1)
- 正则 (1)
- 理论知识 (1)
- 属性 (0)
- openfire (1)
- 面试 (1)
- 继承的优缺点 (1)
- PowerDesigner (1)
- 数字格式化 (1)
- andriod (1)
- webservice (1)
- 记录 (0)
- share (0)
- 开源 (1)
最新评论
来自:http://www.blogjava.net/badqiu/archive/2009/12/21/306793.html
一.REST内容协商介绍
RESTful服务中很重要的一个特性即是同一资源,多种表述.也即如下面描述的三种方式:
1.使用http request header: Accept
Accept: application/xml //将返回xml格式数据
GET /user/123 HTTP/1.1
Accept: application/json //将返回json格式数据
2.使用扩展名
/user/123.json 将返回json格式数据
/user/123.html 将返回html格式数据
3.使用参数
/user/123?format=json //将返回json数据
而以上三种各有优缺点:
1.使用Accept header:
这一种为教科书中通常描述的一种,理想中这种方式也是最好的,但如果你的资源要给用户直接通过浏览器访问(即html展现),那么由于浏览器的差异,发送上来的Accept Header头将是不一样的. 将导致服务器不知要返回什么格式的数据给你. 下面是浏览器的Accept Header
Accept:application/xml,application/xhtml+xml,textml;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
firefox:
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
IE8:
Accept:image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/x-silverlight, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*
2.使用扩展名
丧失了同一url多种展现的方式,但现在这种在实际环境中是使用最多的.因为更加符合程序员的审美观.
3.使用参数
可能由于要编写的字符较多,所以较少使用.
带着上面的选择: 使用扩展名,我们来看一下spring中如何配置这部分.
二.spring rest配置
现spring完成内容协商(content negotiation)的工作是由ContentNegotiatingViewResolver来完成的.它的工作模式支持我上面讲的三种,
ContentNegotiatingViewResolver是根据客户提交的MimeType(如 text/html,application/xml)来跟服务端的一组viewResover的MimeType相比较,如果符合,即返回viewResover的数据.
而 /user/123.xml, ContentNegotiatingViewResolver会首先将 .xml 根据mediaTypes属性将其转换成 application/xml,然后完成前面所说的比较.
下面是ContentNegotiatingViewResolver的完全配置.
<!-- 根据客户端的不同的请求决定不同的view进行响应, 如 /blog/1.json /blog/1.xml -->
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<!-- 设置为true以忽略对Accept Header的支持-->
<property name="ignoreAcceptHeader" value="true"/>
<!-- 在没有扩展名时即: "/user/1" 时的默认展现形式 -->
<property name="defaultContentType" value="text/html"/>
<!-- 扩展名至mimeType的映射,即 /user.json => application/json -->
<property name="mediaTypes">
<map>
<entry key="json" value="application/json" />
<entry key="xml" value="application/xml" />
</map>
</property>
<!-- 用于开启 /userinfo/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"/>
</property>
</bean>
-->
</list>
</property>
</bean>
查看demo: http://demo.rapid-framework.org.cn:8080/springmvc_rest_demo/userinfo
demo下载: http://rapid-framework.googlecode.com/files/springmvc_rest_demo.zip
发表评论
-
数字格式化
2013-12-17 11:32 531今天复习了下jdk的api。 ... -
java 基础
2013-12-13 10:33 304继承的优缺点1.优点: 代码共享,减少创建类的工作量,每个子 ... -
使用java jdk 制作签名
2013-07-05 09:28 726使用jdk提供的工具 keytool keytoo ... -
java JDK 版本列表
2013-06-27 22:38 762http://www.oracle.com/technetw ... -
ANT 理解
2013-05-07 12:41 516在学习struts+spring+hibernate,尤其是 ... -
DES3加密
2013-03-14 17:12 834public class DES3 { priva ... -
java 字符串zip压缩与解压缩
2013-02-23 17:06 928// 压缩 public static Stri ... -
为Eclipce安装jar反编译插件
2013-01-10 14:38 1085目的:做个记录,怕下次搞忘求. 反编译插件URL:http: ... -
android 蓝牙
2012-12-04 14:21 769对于一般的软件开发人员来说,蓝牙是很少用到的,尤其是Andro ... -
2011-09-25 11:03 Android-开启和关闭wifi的代码段
2012-12-03 11:31 7481·申请权限: android.permission. ... -
Android编程获取网络连接状态(3G/Wifi)及调用网络配置界面
2012-12-03 11:25 724获取网络连接状态 随着3G和Wifi的推广,越来越多的And ... -
Android GPS开启与否检测
2012-12-03 10:25 925最近做一个项目:利用到GPS,用户希望在手机GPS未开启的 ... -
JAVA 获取系统编码
2012-12-01 15:45 736package encoding; publi ... -
JAVA断言使用 1.4 推出的新特性
2012-12-01 11:16 779常见的断言特性 前 ... -
手机号码和电话号码的正则表达式
2012-11-18 10:42 1426^[\u4E00-\u9FA50-9a-zA-Z_-]{0, ... -
管理配置文件
2012-11-12 14:59 693建立管理读取配置文件类: public class Conf ... -
Quartz学习 1
2012-11-12 14:55 0Quartz让作业调度简单 Quartz是一个完全由ja ... -
mysql字符集查看以及修改
2012-11-07 10:38 7611.查找MySQL的cnf文件的位置 find / -ina ... -
MySQL数据库编码问题(转载)
2012-11-07 10:19 595在程序开发中,有时会 ... -
设置tomcat 默认编码
2012-10-29 16:44 629在tomcat/conf/server.xml中找到 ...
相关推荐
该实例展示了 spring3 REST 的使用方法,以及同一种内容,多种不同方式展示的实现,例如同一 User 信息,可以展示为:xml,json,html三种不同的格式。可以参考这篇文章:http://badqiu.javaeye.com/blog/552806
并且基于Spring MVC提供了一个完整功能:实现了生成验证码图片,以及验证输入是否匹配的两个接口,接口为Rest风格,符合内容协商原则(同一资源,多种展现:xml,json,html)。 另外,演示了注解(Annotation)的用法,实现...
CXF spring 提供rest服务输出xml或json等格式数据
我们将学习如何使用Spring 4与REST Web Service来获取JSON响应。Spring 4 Web Service类用@RestController 进行注释, 可以取代@Controller和@ResponseBody的使用。要映射REST Web服务URL,请使用注释@...
这是一个示例应用程序,演示了如何使用Spring Boot构建REST风格的服务,该服务可以使用单个控制器类同时为JSON和XML提供服务。 可以使用Gradle在本地构建和运行它。 2.执照 在以下许可条款下,此示例应用程序及其...
Restdocs规范生成支持用法首先转到项目,然后按照说明设置Spring REST Docs扩展。 该扩展名将为您记录的每个resource.json生成resource.json文件。 您还将注意到,该项目提供了gradle插件,可用于读取所有resource....
弹簧座控制器Spring 4 Rest 控制器脚手架示例项目展示了 Spring 4 的 RestController 来提供 XML 和 JSON。 注意 pom 文件中使用的 Jackson 版本,因为 Spring 似乎特别关注 Jackson 版本。 样品用途: curl -v -i -...
Spring MVC - REST Web 服务 对于相同的域对象,RestController 通过接受 application/json 或 application/xml 生成相应的响应。 设置标题 接受:application/json,或 接受:应用程序/xml 并将 GET 请求发送到
输出XML和JSON 使用HttpEntity<T>/ResponseEntity<T> 目录 数据绑定机理 数据类型转换 PropertyEditor依然有效 强大的ConversionService,让很多梦想成真 基于ConversionService体系,定义自定义的类型转换器 格式化...
输出XML和JSON 使用HttpEntity<T>/ResponseEntity<T> 目录 数据绑定机理 数据类型转换 PropertyEditor依然有效 强大的ConversionService,让很多梦想成真 基于ConversionService体系,定义自定义的类型转换器...
数据传输器:XML,JSON。数据库:Mysql。版本控制:Git。构建工具:Maven。工具:SpringToolSuit,Mysql-Workbench,用于测试Restcontroller的Postman。 涵盖的技术方面: 使用过的Spring MVC。 Spring MVC控制器。...
带有JSON有效负载的REST服务。 使用spring-test进行集成测试。 AngularJS 1.2。 极简主义者,专注于使用REST服务的演示。 嵌入式HSQL数据库。 此外,该项目不包含XML。 Spring配置完全由注释驱动,并且每个Servlet ...
8.7 视图和内容协商 309 8.7.1 问题 309 8.7.2 解决方案 309 8.7.3 工作原理 309 8.8 映射异常视图 312 8.8.1 问题 312 8.8.2 解决方案 312 8.8.3 工作原理 312 8.9 用@Value在控制器中赋值 314 ...
8.7 视图和内容协商 309 8.7.1 问题 309 8.7.2 解决方案 309 8.7.3 工作原理 309 8.8 映射异常视图 312 8.8.1 问题 312 8.8.2 解决方案 312 8.8.3 工作原理 312 8.9 用@Value在控制器中赋值 314 ...
Develop RESTful API applications for XML and JSON data transfers with non-blocking asynchronous capabilities Explore Spring's comprehensive transaction support for declarative Transaction Management ...
简单的Spring Rest MVC示例,以演示一个简单的bookservice示例,该示例允许通过Rest EndPoints获取和添加书籍。 本示例可以基于客户端的Accept-Header生成JSON或XML。 项目打包是war文件。 要运行此程序,请部署到...
Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是JavaWeb应用开发的难度,同时有效提升...
您可以直接与基于呈现技术的模板 (如 JSP、 Velocity和 Freemarker )集成或直接生成 XML、 JSON、 Atom和许多其他类型的内容。模型map被转化为合适的格式,如JSP request attributes或是 Velocity template model。
springMVC spring mybatis rest风格架构 根据请求的后缀名 解析成json 或者 xml格式的数据
Spring MVC Restful 基础搭建 ,主要包括:采用 GET POST PUT DELETE 进行数据的 CRUD ,以及内容协商机制,通过不同的请求返回不同的数据格式,包括 JSON XML 以及 HTML