概述:
- 编写处理REST资源的控制器
- 以XML、JSON及其他格式来表述资源
- 使用REST资源
1、概念
以信息为中心的表述性状态转移(Representational StateTransfer,REST)已成为替换传统SOAP Web服务的流行方案。SOAP一般会关注行为和处理,而REST关注的是要处理的数据。
REST与RPC几乎没有任何关系。RPC是面向服务的,并关注于行为和动作;而REST是面向资源的,强调描述应用程序的事物和名词。
表述性(Representational):REST资源实际上可以用各种形式来进行表述,包括XML、JSON(JavaScript Object Notation)甚至HTML——最适合资源使用者的任意形式;
状态(State):当使用REST的时候,我们更关注资源的状态而不是对资源采取的行为;
转移(Transfer):REST涉及到转移资源数据,它以某种表述性形式从一个应用转移到另一个应用。
HTTP方法定义REST的行为:
Create: POST
Read :GET
Update:PUT或PATCH
Delete:DELETE
Spring提供了两种方法将资源的Java表述形式转换为发送给客户端的表述形式:
内容协商(Content negotiation):选择一个视图,它能够将模型渲染为呈现给客户端的表述形式;
消息转换器(Message conversion):通过一个消息转换器将控制器所返回的对象转换为呈现给客户端的表述形式。
内容协商
Spring的ContentNegotiatingViewResolver是一个特殊的视图解析器,它考虑到了客户端所需要的内容类型。
确定请求的媒体类型:(你客户端要什么类型的数据)
Accept请求头和URL的文件扩展名 确定返回类型
对于配置规则可以通过ContentNegotiationManager进行修改
创建ContentNegotiationManager的方法
- 直接声明一个ContentNegotiationManager类型的bean;
- 通过ContentNegotiationManagerFactoryBean间接创建bean;
- 重载WebMvcConfigurerAdapter的configureContentNegotiation()方法。
使用HTTP信息转换器
StringHttpMessageConverter 、转换器上次遇到就是转换器不同,得不到数据
Spring4.0 引入了@RestController 注解 等效于 @Controller + @ResponseBody
使用 ResponseEntity
ResponseEntity 就是包装返回给客户端的数据,可以修改状态和传递异常,都是可以通过注解替代它
2、编写REST客户端
RestTemplate操作定义了36个与REST资源交互的方法
2.1 GET资源
getForObject()和getForEntity()
区别在于getForObject()只返回所请求类型的对象,而getForEntity()方法会返回请求的对象以及响应相关的额外信息
2.2 PUT资源
put()方法能够为我们减少创建URI的不便。
2.3 DELETE资源
2.4 POST资源数据