Spring MVC 基于Method的映射规则(注解版)
在Restful风格的web开发中,根据不同的请求方法使用相应的控制器处理逻辑成为核心需求,下面就看看如何在Spring MVC中识别不同的请求方法。
请求方法
在Http中,请求的方法有很多种,最常见的就是GET、POST,他们的差异就不过多赘述了。由于Restful概念的兴起,即使用Url的不同请求方法来控制业务方法,很多请求方法都开始流行起来,比如PUT、DELETE等等。
那么就先介绍下各个请求方法的使用场景吧!
GET
平时网页的一些基本的URL都是GET请求的,用于执行查询操作。 但是由于GET中URL是有长度的限制的,而GET会把所有的参数都放在URL中,比如
xxx?name=xingoo
因此就会有下面的问题:
- 1 数据都明文暴露,用户可以直接看到
- 2 数据长度有限制
POST
由于上面GET的缺点,POST正好弥补了这些问题。POST方法把数据都存放在body里面,这样即突破了长度的限制;又保证用户无法直接看到。在使用表单时,比较常用
HEAD
HEAD请求只会返回首部的信息,不会返回相应体。通常用于测试数据是否存在、当做心跳检测等等。
PUT
与GET相反,用于改变某些内容。
DELETE
删除某些资源
TRACE
可以理解成,我们为了看看一条请求在到达服务前数据发生了什么变化。可以使用这个命令,它会在最后一站返回原始信息,这样就可以观察到中间是否修改过请求。(经常会用于跨站攻击,所以有一定的安全隐患)
OPTIONS
询问服务器支持的方法。
PATCH
这个方法不太常见,是servlet 3.0提供的方法,主要用于更新部分字段。与PUT方法相比,PUT提交的相当于全部数据的更新,类似于update;而PATCH则相当于更新部分字段,如果数据不存在则新建,有点类似于neworupdate。
Spring中的使用方法
在Spring MVC中,RequestMethod提供了方法的集合:
public enum RequestMethod {
GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE
}
在控制器中,我们可以通过设置RequestMapping的method方法,改变接收数据controller:
@Controller
public class HelloController {
@RequestMapping(value="/test",method=RequestMethod.GET)
public @ResponseBody String get(){
return "from get";
}
@RequestMapping(value="/test",method=RequestMethod.POST)
public @ResponseBody String post(){
return "from post";
}
}
虽然上面的Url是一样的,但是由于请求方法不同,他们会根据请求方法使用相应的控制器方法处理请求。
- Centos7下部署两套python版本并存环境的操作记录
- MapX中取得图元操作的速度测试
- FluorineFx:基于RSO(远程共享对象)的文本聊天室
- 扫盲文章:AMF,RTMP,RTMPT,RTMPS
- "操作必须使用一个可更新的查询"问题
- 利用fluorineFx将DataTable从.Net传递到Flash
- Linux服务器性能压力测试
- linq to sql中的自动缓存(对象跟踪)
- php5.6安装Zend Opcache扩展
- 图片相似检测:三行代码实现
- Gitlab备份和恢复操作记录
- 利用图形界面对Sql2008做日志收缩
- 值得关注的5个Python开源项目
- 使用Docker三剑客部署集群
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Oracle数据误删恢复
- 用斗地主的实例学会使用java Collections工具类
- Command PhaseScriptExecution failed with a nonzero exit code问题解决
- Effective Java中构建器Builder的理解
- Java的位运算符详解实例。
- 用一个测试类简化排序算法时间复杂度的研究
- R语言之可视化(33)绘制差异基因分析统计图
- Java transient不被持久化的原因
- 举一个有趣的例子,让你轻松搞懂JVM内存管理
- gulp的使用
- SpringBoot中 使用[info]日志级别打印mybatis sql语句
- Spring Boot 使用策略模式指定Service实现类
- 55. Vue webpack的基本使用
- ajax无刷新页面切换,历史记录后退前进解决方案
- 一起来学演化计算-SBX模拟二进制交叉算子和DE差分进化算子