Spring rest
来源:互联网 发布:化工制图软件 编辑:程序博客网 时间:2024/06/07 16:13
1.Rest的基本原理
Rest与RPC几乎没有任何关系。RPC是面向服务的,并关注行为和动作,而REST是面向资源的,强调描述应用程序的事物和名词。
为了理解REST是什么,我们将它的首字母缩写拆分成不同的组成部分
简单说,rest就是将资源的状态以合适的形式从服务器转移到客户端(或者反之)
2.Spring是如何支持REST的
3.编写面向资源的Controller
4.执行REST动作
REST是关于资源状态转移的。需要一些动作(verb)来应用于这些资源。对于给定的资源常见的操作时在服务器上对资源进行创建、检索、更新和删除。
每个HTTP方法具有两个特性:安全性和幂等性。如果一个方法不改变资源的状态,就认为他是安全的。幂等的方法可能改变也可能不改变状态,但是每一次请求
和多次请求具有相同的作用。按照定义,所有安全的方法都必须是幂等的。
SpittleController的getSpittle()方法使用了@RequestMapping注解,并使用method属性设置其处理GET请求。
使用put更新资源
HTTPStatus.NO_CONTENT说明响应状态要设置为HTTP状态码204.这个状态码一位置请求被成功处理了。
处理delete请求
使用Post创建新的资源
这个方法的@RquestMapping与之前的不同没有value属性,就是说createSpittle()将处理/spittles的请求
这个方法使用@ResponseSatus设置状态码,这次状态码设置成了201来表明一个资源被成功创建了。
所以方法最后要做的事情就是设置Location头信息来包含资源的URL.
尽管这不是201响应的墙纸要求,但可以在响应体中返回完成的实体表述。
5表述资源
表述是Rest中很重要的一个方面。他是关于客户端和服务器端真对某一资源是如何通信的。任何给定的资源都几乎可以用任意形式来表述。
可以使用JSON、XML、html、pdf、excel等方式来展现。控制器本身通常不关心资源如何表述。控制器以java对象的方式来处理资源。
Spring提供了两种方法将资源的java表述形式转换为发送客户端的表述形式:
*基于视图渲染进行协商
*HTTP消息转换器
5.1协商资源表述
当控制器处理方法完成时,通常会返回一个逻辑视图名,如果方法不直接返回逻辑视图名(例如方法返回void)那么逻辑视图名,会来源于
请求的URL。DispatcherServlet接下来会将视图的名字传递给一个视图解析器。要求它来帮助确定应该用那个视图来渲染请求结果。
在面向人类访问的应用程序中,选择的视图通常为HTML。
当要将视图名解析为能够产生资源表述的视图时,需要从另一个维度来考虑。视图不紧要匹配视图名,而且选择的视图要适合客户端。
Spring的ContentNegotiatingViewResolver是一个特殊的视图解析器。他要作为一个bean配置在Spring应用上下文中.
ContextNegotiatingViewResolver如何工作
*确定请求的媒体类型
accept头信息并不总是可靠的。如果是web浏览器,那并不保证客户端需要的类型就是浏览器在accept头所发送的值。
ContentNegotiatingViewResolver将考虑到Accept头部信息并使用它请求的媒体类型。但它会首先查看URL的文件扩展名。如果
URL在结尾处有文件扩展名的,它将扩展名与mediaTypes中的条目进行匹配。
如果文件扩展名不能得到任何媒体类型,那就会考虑从请求中的Accept头部信息。如果请求头中不包含accept信息,那么将使用
defaultContentType属性设置的媒体类型。
影响如何选择媒体类型
*查找视图
*使用http信息转换器
典型的Spring mvc控制器方法在结束时会将一些信息放到模型中,然后到达一个视图来为用户渲染这些数据。
但是当控制器的工作是产生资源表述的时候,有一种更直接的方法可以绕过模型和数据。在这种风格的处理器方法中,
控制器返回的对象将自动转化为适合客户端的表述形式,要使用这项新技术,首先要将@ResponseBody注解添加到控制器处理方法上。
在ResponseBody中返回资源状态
正常情况下,当处理方法返回Java对象时,这个对象会放在模型中,并在视图中渲染使用。但如果处理方法使用了@ResponseBody,那表明
Http信息转换器机制会发挥作用,并将返回的对象转换为客户端需要的人一格式。
例如
@ResponseBody注解会告知Spring,我们要将返回的对象作为资源发送给客户端,并将其转换为客户端可接受的表述形式。
Spring 提供了多个HTTP信息转换器,用于实现资源表述与各种java类型之间的互相转换。
例如,假设客户端通过请求的accept头信息表明它能接受application/json,并且在jackson json在类路径下,那么处理方法返回的对象将交给MappingJacksonHttpMessageConverter,并由其转换为客户端的Json表述形式。
在ReqeustBody中接收资源状态
在Restful会话的另一端,客户端可能会以JSON、XML或其他内容格式给我们送过来一个对象来。@RequestBody也能对客户端发过来的对象做相同的事情
请求的Content-Type头信息必须是application/json
Jackson JSON库必须包含在应用程序的类路径下
了解RestTemplate的操作
- Spring REST
- Spring Rest
- Spring REST
- Spring REST
- spring REST
- Spring REST
- Spring REST
- Spring REST
- spring rest
- Spring REST
- Spring--REST
- Spring rest
- Spring REST
- Spring REST
- ireport + rest + spring注入
- REST In Spring : RestTemplate
- REST with Spring series
- Spring Rest 406 Error
- C#支付宝支付接口H5版(手机网页支付)
- iOS->RN实战分享之基础篇:在现有项目中使用RN
- Android的MVC数据流
- JW Player使用简介
- 关于复选框全选问题
- Spring rest
- QT Demo 之 window(2) Splash
- Gradle笔记——构建基础
- 算法训练 数字三角形
- 1017. Queueing at Bank (25)
- linux安装c++必需的库boost过程
- UVa-10881 Piotr's Ants
- 树状数组与线段树
- 欢迎使用CSDN-markdown编辑器