java.restful风格
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。
在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>
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请求
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 模板来表示这些矩阵变量。这样的话,不管矩阵变量顺序如何,都能够保证请求可以正确的匹配。
SpringMVC默认未开始 对 矩阵变量 解析和封装为handler方法入参, 需要在配置文件中开启 矩阵变量的使用 .
<mvc:annotation-driven enable-matrix-variables="true"/>
页面中设计表单
<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 也可以.
控制层
@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风格相关推荐
- java restful接口开发实例_Spring Boot 中 10 行代码构建 RESTful 风格应用!
点击上方"Java后端技术",选择"置顶或者星标" 你关注的就是我关心的! 作者:江南一点雨 微信公众号:牧码小子(ID:a_javaboy) 推荐阅读:10个 ...
- java restful接口开发实例_实战:基于Spring Boot快速开发RESTful风格API接口
写在前面的话 这篇文章计划是在过年期间完成的,示例代码都写好了,结果亲戚来我家做客,文章没来得及写.已经很久没有更新文章了,小伙伴们,有没有想我啊.言归正传,下面开始,今天的话题. 目标 写一套符合规 ...
- 一文搞懂RESTFUL风格(Java版)
文章目录 前言 一.Restful是什么? 二.使用步骤 1.Resultful有哪些类型? 2.编写代码 验证结果使用postman 3. 常见的状态码 总结 如果您有Java方面的问题(不局限于此 ...
- Java面试之RESTful风格接口
1.Restful风格接口简介: 答:Restful这个词,是一个外国人Roy Thomas Fielding在2000年提出的.这个Fielding将他对互联网软件的架构原则,定名为REST,即Re ...
- RESTful风格及其SpringMVC实现
目录 1.RESTful概念 2.RESTful功能 3.对比:传统方式操作资源 4.SpringMVC实现传统方式操作资源 5.使用RestFul操作资源 6.SpringMVC实现RESTful操 ...
- springboot 集成jpa_基于Spring Boot+JPA Restful 风格的数据
第一章 Restful简介 Restful是一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服 务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次, ...
- ssm框架restful风格实现增删改查
1.什么是restful风格 大家在做Web开发的过程中,method常用的值是get和post. 可事实上,method值还可以是put和delete等等其他值. 既然method值如此丰富,那么就 ...
- 用cxf开发restful风格的WebService
我们都知道cxf还可以开发restful风格的webService,下面是利用maven+spring4+cxf搭建webService服务端和客户端Demo 1.pom.xml <projec ...
- 谷歌 Java 编程风格指南
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | http://hawstein.com/201 ...
最新文章
- ubuntu自定义命令
- mysql两列查询结果列拼接一个表输出_sql select语句,查询出两列结果拼接在一起...
- icon-font-generator 的使用
- sqlmap md5怎么解密_三十九,hackthebox渗透之DirBuster扫描路径及Sqlmap
- 被弃用的 Docker 未死:带着 1.05 亿美元融资“回归”,估值高达 21 亿
- keras: 用预训练的模型提取特征
- nginx location 配置
- position学习终结者(一)
- Linux系统-Ubuntu的下载和安装
- Java基本数据类型字节长度
- java 错误代码1603_java更新时出现错误代码1603的解决方法
- cp命令—Linux文件管理
- SAP固定资产中一些概念:折旧码,折旧范围和折旧表
- JVM垃圾回收——G1垃圾收集器
- 苹果授权登录绑定手机号被拒绝
- SPS PDSCH的HARQ反馈
- 简单双拼入门,一看就会,看完就用.
- 布尔盲注运用burp的操作
- 非法终端接入管控的三部曲:控、查、导
- OJ c语言第一次实验