restful风格

RESTful架构,就是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。

RESTful(即Representational State Transfer的缩写)其实是一个开发理念,是对http的很好的诠释。Representational State Transfer的含义就是“表现层的状态转化”。

使用RESTful这种架构理念就需要对http请求进行一系列的规范:

1、对url规范,写成RESTful的格式的url

非REST的url:http://..../queryGoods?id=001&itemType=服装

REST风格的url:http://..../queryitem/001/服装

特点:url简洁,将参数通过url传到服务端

2、http的方法规范

不管是删除、添加、更新、使用url是一致的,如果进行删除,需要设置http的方法为delete,同理添加

后台controller方法:判断http方法,如果是delete执行删除,如果是post执行添加。

默认的只能使用get或post方法,

3、对http的contentType规范

请求时指定contentType,要json数据,设置成json格式的type。

  1. 在web.xml中配置过滤器,用来支持get,post以外的请求

    <filter><filter-name>methodFilter</filter-name><filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class><init-param><param-name>methodParam</param-name><param-value>mym</param-value> <!-- 不配置就默认为 _method --></init-param></filter><filter-mapping><filter-name>methodFilter</filter-name><url-pattern>/*</url-pattern><!-- <servlet-name>mcpMvc</servlet-name> --></filter-mapping>
  1. index.jsp页面

    <h3><a href="${pageContext.request.contextPath}/beautyOpreation/39.html">RestFul-GET</a></h3>
​<form method="post" action="${pageContext.request.contextPath}/beautyOpreation"><input type="text" name="bname" value="李思思"/><br/><input type="text" name="bage" value="30"/><br/><input type="text" name="cat.cname" value="tomcat"/><br/><input type="text" name="cat.cage" value="3"/><br/><input type="submit" value="RestFul-POST"/></form>
​<form method="post" action="${pageContext.request.contextPath}/beautyOpreation/988/yellow"><input type="text" name="bname" value="李思思put"/><br/><input type="text" name="bage" value="30"/><br/><input type="text" name="cat.cname" value="tomcatput"/><br/><input type="text" name="cat.cage" value="3"/><br/><input type="hidden" name="mym" value="PUT"/><input type="submit" value="RestFul-PUT"/></form>
​
​<form method="post" action="${pageContext.request.contextPath}/beautyOpreation"><input type="text" name="bname" value="李思思DELETE"/><br/><input type="text" name="bage" value="30"/><br/><input type="text" name="cat.cname" value="tomcatDELETE"/><br/><input type="text" name="cat.cage" value="3"/><br/><input type="hidden" name="mym" value="DELETE"/><input type="submit" value="RestFul-DELETE"/></form>
<hr style="border: 1px dashed gold;"/>

注: input type="hidden" name="_method" value="put" 会被配置的过滤器处理为PUT请求

  1. Handler方法

/*** Resful风格里:* 1: 无论是 增删改查 都可能访问同一个url , 通过 提交方式来区分*  get: 查   post: 增   put:改  delete:删**  put 和 delete 请求 需要 使用 HiddenHttpMethodFilter 来进行 底层过滤修改*  在post模式下  给表单添加一个 隐藏域 添加一个 名为 _method 的 请求参数  值写为put / delete_method 可以在 过滤器配置时修改.** 2: 把 请求路径里的部分 获取为请求参数*/
@RestController
public class RestFulController {
​@GetMapping("/beautyOpreation/{bid}.html")public String queryBeauty(@PathVariable(name="bid") Integer bid){return "server - get -"+bid;}
​@PostMapping("/beautyOpreation")public String addBeauty(){return "server - post";}
​@PutMapping("/beautyOpreation/{bid}/{skincolor}")public Beauty updateBeauty(@PathVariable(name="bid") Integer bid,@PathVariable(name="skincolor") String skin,Beauty beauty){System.out.println(bid);System.out.println(skin);return beauty;}
​@DeleteMapping("/beautyOpreation")public String deteleBeauty(){return "server - delelte";}
}

路径变量: @pathvariable 将restful风格请求路径里的参数绑定到 handler方法入参中 . /beauty/{id} 路径变量可以直接使用.


矩阵变量: @MatrixVariable 可以将restful风格请求路径里的矩阵参数 绑定到 handler方法入参中. 矩阵变量需要开启配置

介绍:

根据 URI 规范 RFC 3986 中 URL 的定义,路径片段中可以可以包含键值对。规范中没对对应的术语。一般 “URL 路径参数” 可以被应用,尽管更加独特的 “矩阵 URI” 也经常被使用并且相当有名。在 Spring MVC 它被成为矩阵变量

矩阵变量可以出现在任何路径片段中,每一个矩阵变量都用分号(;)隔开。比如 “/get;name=zhihao;age=18”。多个值可以用逗号隔开,比如 “age=18,20,25”,或者分开写 “age=18;age=20;age=25”。

如果你希望一个 URL 包含矩阵变量,那么请求映射模式必须用 URI 模板来表示这些矩阵变量。这样的话,不管矩阵变量顺序如何,都能够保证请求可以正确的匹配。

  1. SpringMVC默认未开始 对 矩阵变量 解析和封装为handler方法入参, 需要在配置文件中开启 矩阵变量的使用 .

<mvc:annotation-driven enable-matrix-variables="true"/>
  1. 页面中设计表单

    <form action="${pageContext.request.contextPath}/user/97;name=zhangsasn;age=1,2,3" method="post"><input type="text" name="myparam" value="修改"/><input type="hidden" name="mym" value="PUT">  <input type="submit" value="提交"></form>

这里过滤器的要处理的参数名已经改为了sm 不改默认的method 也可以.

  1. 控制层

    @PutMapping("/user/{uid}")@ResponseBodypublic List<Integer> testUpdate(@PathVariable Integer uid,@MatrixVariable String name,@MatrixVariable List<Integer> age){System.out.println(uid);System.out.println(name);System.out.println(age);return age;}

解决 字符编码过滤器 和 hiddenMethod过滤器 restful乱码:

<mvc:annotation-driven><mvc:message-converters><bean class="org.springframework.http.converter.StringHttpMessageConverter"><property name="supportedMediaTypes"><list><value>text/plain;charset=utf-8</value><value>text/html;charset=utf-8</value><value>application/json;charset=utf-8</value></list></property></bean></mvc:message-converters>
</mvc:annotation-driven>

java.restful风格相关推荐

  1. java restful接口开发实例_Spring Boot 中 10 行代码构建 RESTful 风格应用!

    点击上方"Java后端技术",选择"置顶或者星标" 你关注的就是我关心的! 作者:江南一点雨 微信公众号:牧码小子(ID:a_javaboy) 推荐阅读:10个 ...

  2. java restful接口开发实例_实战:基于Spring Boot快速开发RESTful风格API接口

    写在前面的话 这篇文章计划是在过年期间完成的,示例代码都写好了,结果亲戚来我家做客,文章没来得及写.已经很久没有更新文章了,小伙伴们,有没有想我啊.言归正传,下面开始,今天的话题. 目标 写一套符合规 ...

  3. 一文搞懂RESTFUL风格(Java版)

    文章目录 前言 一.Restful是什么? 二.使用步骤 1.Resultful有哪些类型? 2.编写代码 验证结果使用postman 3. 常见的状态码 总结 如果您有Java方面的问题(不局限于此 ...

  4. Java面试之RESTful风格接口

    1.Restful风格接口简介: 答:Restful这个词,是一个外国人Roy Thomas Fielding在2000年提出的.这个Fielding将他对互联网软件的架构原则,定名为REST,即Re ...

  5. RESTful风格及其SpringMVC实现

    目录 1.RESTful概念 2.RESTful功能 3.对比:传统方式操作资源 4.SpringMVC实现传统方式操作资源 5.使用RestFul操作资源 6.SpringMVC实现RESTful操 ...

  6. springboot 集成jpa_基于Spring Boot+JPA Restful 风格的数据

    第一章 Restful简介 Restful是一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服 务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次, ...

  7. ssm框架restful风格实现增删改查

    1.什么是restful风格 大家在做Web开发的过程中,method常用的值是get和post. 可事实上,method值还可以是put和delete等等其他值. 既然method值如此丰富,那么就 ...

  8. 用cxf开发restful风格的WebService

    我们都知道cxf还可以开发restful风格的webService,下面是利用maven+spring4+cxf搭建webService服务端和客户端Demo 1.pom.xml <projec ...

  9. 谷歌 Java 编程风格指南

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | http://hawstein.com/201 ...

最新文章

  1. ubuntu自定义命令
  2. mysql两列查询结果列拼接一个表输出_sql select语句,查询出两列结果拼接在一起...
  3. icon-font-generator 的使用
  4. sqlmap md5怎么解密_三十九,hackthebox渗透之DirBuster扫描路径及Sqlmap
  5. 被弃用的 Docker 未死:带着 1.05 亿美元融资“回归”,估值高达 21 亿
  6. keras: 用预训练的模型提取特征
  7. nginx location 配置
  8. position学习终结者(一)
  9. Linux系统-Ubuntu的下载和安装
  10. Java基本数据类型字节长度
  11. java 错误代码1603_java更新时出现错误代码1603的解决方法
  12. cp命令—Linux文件管理
  13. SAP固定资产中一些概念:折旧码,折旧范围和折旧表
  14. JVM垃圾回收——G1垃圾收集器
  15. 苹果授权登录绑定手机号被拒绝
  16. SPS PDSCH的HARQ反馈
  17. 简单双拼入门,一看就会,看完就用.
  18. 布尔盲注运用burp的操作
  19. 非法终端接入管控的三部曲:控、查、导
  20. OJ c语言第一次实验

热门文章

  1. 强化学习入门--甄景贤
  2. 前端-原生一键复制功能
  3. 黑群晖 WebDAV Server 通过 NetDriver2 连接报错 Permission Error
  4. matlab程序循环,matlab循环程序只得到一个结果
  5. 指甲之指甲宝宝健康晴雨表
  6. 一文搞懂TCP/IP四层模型
  7. Tablayout-布局标签
  8. 亚马逊如何用五个阶段和五个运营策略打造出自己的爆款
  9. 堡垒机Jumpserver的源码部署教程
  10. 硒鼓带不带芯片区别_科普:你了解硒鼓芯片吗?