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 ...
随机推荐
- 语义web基础知识学习
最近找了一本书,<语义web技术基础>----Pascal Hitzler等编著的.因为最近在看关于自然语言处理的一些东西,就顺带翻了一下,做一点学习笔记,方便以后查看. 本书的作者 Pa ...
- 【bzoj2819】Nim(dfs序+树状数组/线段树)
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=2819 首先根据SG定理,可得若每堆石子数量的异或值为0,则后手必胜,反之先手必胜.于是 ...
- springboot 配置过滤器
能配置例外 先写配置文件类 FilterConfig.java package com.ty.tyzxtj.config; import javax.servlet.Filter; import or ...
- 在与SQLServer建立连接时出现与网络相关的或特定于实例的错误
标题: 连接到服务器 ------------------------------ 无法连接到 (local). ------------------------------ 其他信息: 在与 SQL ...
- hihoCoder挑战赛27题目一 福字 (dp)
题目: 一个n × n的矩阵,其中每个位置都是一个非负整数. 一个福字被定义成是大小为 k 的正方形,满足其中的每个位置上的数都恰好比他的左边的那个和上边的那个大1(如果左边或上边的那个不存在的话就无 ...
- php+JS进度条
<?phpini_set('max_execution_time','0');//设置本页面加载时间无限制 echo "<div style='border: 1px solid ...
- IntelliJ Idea 免费激活方法免激活码
1. 到网站 http://idea.lanyus.com/ 获取注册码. 2.填入下面的license server: http://intellij.mandroid.cn/ http://ide ...
- webservice 交错数组
net webservices public DataSet SelectOPQuestionByWhere(string strWhere, string[][] strArry) { if (!k ...
- KVM-环境安装
1.操作系统安装 本文采用Centos6.4X64操作系统,也可以采用RHEL/CentOS6.x. (1)查看系统版本.内核版本 ##查看系统版本 [root@KVM ~]# cat /etc/re ...
- C# GDI+编程
窗口刷新的时候,会产生Paint事件,那么我们给这个事件添加一个处理函数.然后在这个函数里画图.就能保证所画的图不被刷新掉, 它可以总是显示.Paint事件对应的委托是:public delegate ...