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: 如何避免表单重复提交?

      

 

原文地址:https://www.cnblogs.com/liufei1983/p/7587296.html