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的更多相关文章

  1. Spring学习(十九)----- Spring的五种事务配置详解

    前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. ...

  2. Spring 学习十五 AOP

    http://www.hongyanliren.com/2014m12/22797.html 1: 通知(advice): 就是你想要的功能,也就是安全.事物.日子等.先定义好,在想用的地方用一下.包 ...

  3. spring学习十九 常用注解

    1. @Component 创建类对象,相当于配置<bean/>2. @Service 与@Component 功能相同. 2.1 写在 ServiceImpl 类上.3. @Reposi ...

  4. spring学习 十八 spring的声明事物

    1.编程式事务: 1.1 由程序员编程事务控制代码.commit与rollback都需要程序员决定在哪里调用,例如jdbc中conn.setAutoCimmit(false),conn.commit( ...

  5. spring学习 十六 spring加载属性文件

    第一步:创建一个properties文件,以数据库链接作为实例db.properties jdbc.url=jdbc:mysql://192.168.153.128:3306/mybaties?cha ...

  6. spring学习 十五 spring的自动注入

    一  :在 Spring 配置文件中对象名和 ref=”id” ,id 名相同使用自动注入,可以不配置<property/>,对应的注解@Autowired的作用 二: 两种配置办法 (1 ...

  7. spring学习 十四 注解AOP 通知传递参数

    我们在对切点进行增强时,不建议对切点进行任何修改,因此不加以使用@PointCut注解打在切点上,尽量只在Advice上打注解(Before,After等),如果要在通知中接受切点的参数,可以使用Jo ...

  8. spring学习 十二 AspectJ-based的通知入门 带参数的通知

    第一步:编写通知类 package com.airplan.pojo; import org.aspectj.lang.ProceedingJoinPoint; public class Advice ...

  9. spring学习 十 schema-based 前置后后置通知

    spring 提供了 2 种 AOP 实现方式:(1)Schema-based ,(2)AspectJ Schema-based:每个通知都需要实现接口或类,配置 spring 配置文件时在<a ...

随机推荐

  1. VisualStudio卸载后无法再次安装的解决方法

    解决方法如下: 1.删除 Visual Studio 2013 安装目录文件夹 Visual Studio 12.0 2.win+R 输入 %UserProfile%\Appdata\Local\Mi ...

  2. QT 利用ListWidget 和 StackedLayout 配合实现 分页 选项

    1. 如图, 左边为listwidget,右边为StackedLayout, 通过listwidget的不同选项,可以使右边的不同页显示出来. 2. dialog.h #ifndef DIALOG_H ...

  3. Spring初学之Spel初配

    Spel又时候可以方便我们为bean的属性赋值,如下配置文件就是常用的一些使用: <?xml version="1.0" encoding="UTF-8" ...

  4. tyvj 1884 [NOIP2000T4]方格取数 || codevs 1043 dp

    P1884 [NOIP2000T4]方格取数 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 [noip2000T4]方格取数 描述 设有N*N的方格图(N& ...

  5. Codeforces Round #304 (Div. 2) D. Soldier and Number Game 素数打表+质因数分解

    D. Soldier and Number Game time limit per test 3 seconds memory limit per test 256 megabytes input s ...

  6. selenium+python3 鼠标事件

    1.鼠标右击 ActionChains(driver).contest_click(right_click).perform() 2.鼠标悬停 ActionChains(driver).move_to ...

  7. 绑定当前对象例子——Tag="{Binding}"

    <TreeView Margin="10,5,0,0" HorizontalAlignment="Left"  VerticalAlignment=&qu ...

  8. 我总结的js变量、数组、对象等基础知识

    我的第一篇博客 ——JS的那些基础概念 第一次写,也不知道有没有什么套路,需不需要注意文采之类的.不管了,我就直接写主要内容吧!下面是我总结的一些关于JS的基础概念: [变量]从字面上面,变量是可变的 ...

  9. iOS耗电量测试方法及其数据收集

    常用的电量测试方法: 硬件测试(硬件要求比较高,成本比较大,这里介绍软件测试方法) 软件工具检测 几个典型的耗电场景如下: 定位,尤其是调用GPS定位 网络传输,尤其是非Wifi环境 cpu频率 内存 ...

  10. 利用CocoaLumberjack框架+XcodeColors插件,调试输出有彩色的信息

    效果如下: 步骤: 1. 安装Xcode插件:XcodeColors(方法请参考这里) 2. 为项目添加 CocoaLumberjack 框架(方法请参考这里) 3. 添加代码 (1) 为项目添加 p ...