Spring学习十 rest
1: Web service: 是一个大的概念范畴,它表现了一种设计思想
SOAP 是 Web service 的一个重要组成部份. SOAP 是一种协议而非详细产品.SOAP 是通过 XML 文件来做为数据转输的的载体,走 HTTP 的线路.
REST(表述行状态转移, 是面向资源的, Spring MVC就天然支持REST)也是一种web service。
2: 编写rest客户端有哪两种方式?
HttpClient : 可以写出样板式的代码。
RestTemplate: 可以消除样板式代码,进行封装。
3: SOAP VS REST
SOAP相对REST来说较为重量级,由于采用XML格式的消息体,消息的有效负荷占比较REST常用的JSON少,不过XML较JSON来说更容易为人阅读。
rest学习起来比较简单,容易上手,SOAP相对来说难些;rest能通过http形式的直接调用,基于JSON,SOAP通过XML传输;rest效率和速度来说相对快些,SOAP则稍逊一筹.
SOAP接口是自解释的,采用WSDL进行描述,程序可以基于WSDL进行解释并自动生成SOAP调用代码;REST接口只能通过接口文档进行描述,难以做到程序解释接口定义。
SOAP采用HTTP作为传输层协议,对HTTP协议来说服务调用是透明的,防火墙上难以对SOAP进行细粒度的权限控制,也难以使用http的缓存机制提高效率。而REST是标准的HTTP访问,可以充分利用HTTP协议提供的一些好处,例如可以在防火墙上较好地进行权限控制(最小粒度可以基于每个URL的CRUD操作),也可以充分利用缓存提高响应速度和系统的吞吐效率。
由于REST是标准的HTTP访问,其适用性更广,web应用,移动应用都可以在不使用第三方库的情况下方便地使用REST接口构造应用程序。
对于移动程序而言,由于REST的有效负荷占比高SOAP的XML封装,采用REST接口可以降低程序使用的带宽。
根据REST设计原则,接口是无状态的,因此可以简单地通过对服务器进行水平扩展提升服务能力。
4:@RequestParam
required=false或者true来要求@RequestParam配置的前端参数是否一定要传 ,默认是一定要传,否则报错。
@RequestParam String inputStr // 默认绑定前段的InputStr参数
// 下面的对传入参数指定为aa,如果前端不传aa参数名,会报错
@RequestParam(value="aa") String inputStr // 绑定前段的aa参数
5: @PathVariable绑定URL中的参数
"/spittles/{username}" , 参数名字用username, uRL /spittles/hhhh“。
6: @ResponseBody
该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;
@ResponseBody注解时: 根据Request对象header部分的Accept属性(逗号分隔),逐一按accept中的类型,去遍历找到能处理的 HttpMessageConverter;
一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是写入 HTTP response body中。比如异步获取json数据,加上@responsebody后,会返回json数据(不是直接返回json数据,而是HttpMessageConverter处理)。
7:@RequestBody
根据Request对象header部分的Content-Type类型,逐一匹配合适的HttpMessageConverter来读取数据;
POST模式下,使用@RequestBody绑定请求对象,Spring会帮你进行协议转换,将Json、Xml协议转换成你需要的对象。
8: HTTP信息转换器(与视图渲染不同):
controller返回数据给前段显示,可以用视图渲染的方式,将信息放在模型中,然后返回一个逻辑视图,进行渲染。
另外一种方式就是HTTP信息转换器,直接讲数据转化成客户端需要的数据, 这种方式,需要将@ResponseBody 注解放到控制器处理方法上。
正常情况下,当controller方法返回java对象时,把对象放在模型中,并在视图中渲染。但是如果使用了 @ResponseBody,表明HTTP
信息转换器机制会发挥作用,将对象转成客户端需要的类型。根据accept来去定返回的格式。@RequestMapping(headers = {“Accept=text/xml, application/json”}) // heads表示仅接收这种类型的HTTP请求。
多个HttpMessageConverter, Spring根据返回格式的需求,找到合适的converter客户端发送过来JSON, XML或其它内容格式给我们的时候,如果用原始的格式,是很不方便的。 可以用用 @RequestBody 对发送的东西进行转换。@RequestMapping(headers = {“Content-Type=application/json”}) //指明客户端传递进来的格式。这时候会用Jackson JSON 库进行处理。
9: @ResponseStatus(HttpStatus.NO_CONTENT) :
表明返回的状态码。
6: 如何避免表单重复提交?
Spring学习十 rest的更多相关文章
- Spring学习(十九)----- Spring的五种事务配置详解
前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. ...
- Spring 学习十五 AOP
http://www.hongyanliren.com/2014m12/22797.html 1: 通知(advice): 就是你想要的功能,也就是安全.事物.日子等.先定义好,在想用的地方用一下.包 ...
- spring学习十九 常用注解
1. @Component 创建类对象,相当于配置<bean/>2. @Service 与@Component 功能相同. 2.1 写在 ServiceImpl 类上.3. @Reposi ...
- spring学习 十八 spring的声明事物
1.编程式事务: 1.1 由程序员编程事务控制代码.commit与rollback都需要程序员决定在哪里调用,例如jdbc中conn.setAutoCimmit(false),conn.commit( ...
- spring学习 十六 spring加载属性文件
第一步:创建一个properties文件,以数据库链接作为实例db.properties jdbc.url=jdbc:mysql://192.168.153.128:3306/mybaties?cha ...
- spring学习 十五 spring的自动注入
一 :在 Spring 配置文件中对象名和 ref=”id” ,id 名相同使用自动注入,可以不配置<property/>,对应的注解@Autowired的作用 二: 两种配置办法 (1 ...
- spring学习 十四 注解AOP 通知传递参数
我们在对切点进行增强时,不建议对切点进行任何修改,因此不加以使用@PointCut注解打在切点上,尽量只在Advice上打注解(Before,After等),如果要在通知中接受切点的参数,可以使用Jo ...
- spring学习 十二 AspectJ-based的通知入门 带参数的通知
第一步:编写通知类 package com.airplan.pojo; import org.aspectj.lang.ProceedingJoinPoint; public class Advice ...
- spring学习 十 schema-based 前置后后置通知
spring 提供了 2 种 AOP 实现方式:(1)Schema-based ,(2)AspectJ Schema-based:每个通知都需要实现接口或类,配置 spring 配置文件时在<a ...
随机推荐
- Eclipse常用快捷键(转帖)
Ctrl+1 快速修复(最经典的快捷键,就不用多说了) Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加) Ctrl+Alt+↑ 复制当前行到上一行(复制增加) Alt+ ...
- Elasticsearch6.0简介入门介绍
Elasticsearch简单介绍 Elasticsearch (ES)是一个基于Lucene构建的开源.分布式.RESTful 接口全文搜索引擎.Elasticsearch 还是一个分布式文档数据库 ...
- MapReduce-边数据
边数据 边数据(side data)是作业所需的额外的只读数据,以辅助处理主数据集.所面临的挑战在于如何使所有map或reduce任务(这些任务散布在集群内部)都能够方便而高效地使用边数据. 利用Jo ...
- 【转】php 操作数组(合并,拆分,追加,查找,删除等)
1. 合并数组 array_merge()函数将数组合并到一起,返回一个联合的数组.所得到的数组以第一个输入数组参数开始,按后面数组参数出现的顺序依次迫加.其形式为: array array_merg ...
- php中浮点型变量
$d = (0.1+0.7)*10;//$d为8 //floor函数返回不大于value的最接近的整数,舍去小数部分取整 $e = floor($d);//$e为7 为什么$e为7,而不是8 因为$d ...
- 什么是 RegExp?
RegExp 是正则表达式的缩写. regular expression 当您检索某个文本时,可以使用一种模式来描述要检索的内容.RegExp 就是这种模式. 简单的模式可以是一个单独的字符. 更复杂 ...
- nova instance启动中的同步与异步
instance create:nova/api/servers.create -- self.compute_api.create -- self.compute_task_api.build_in ...
- 将datagridview数据保为xml或txt文件
using System.IOpublic void SaveFile() { //实例化一个保存文件对话框 SaveFileDialog s ...
- CentOS下用于查看系统当前登录用户信息的4种方法
作为系统管理员,你可能经常会(在某个时候)需要查看系统中有哪些用户正在活动.有些时候,你甚至需要知道他(她)们正在做什么.本文为我们总结了4种查看系统用户信息(通过编号(ID))的方法. 1. 使用w ...
- 数据库排序规则的冲突(理解collate Chinese_PRC_CI_AS)
之前碰到了数据库排序规则冲突问题,即百度或者 Google 的老话题: “ 无法解决 equal to 操作中‘ sql_latin1_general_cp1_ci_as ’和‘ chinese_pr ...