注解@RequestMapping 的使用

1首先@RequestMapping 中的值,我们说请求方法l路径,请求url我们都知道怎么请求了,在第一节helloworld中,
我们先说我们先建一个类,RequestMappingTest
方法如下:
/**
* 1. @RequestMapping 除了修饰方法, 还可来修饰类 2. 1). 类定义处: 提供初步的请求映射信息。相对于 WEB 应用的根目录
* 2). 方法处: 提供进一步的细分映射信息。 相对于类定义处的 URL。若类定义处未标注 @RequestMapping,则方法处标记的 URL
* 相对于 WEB 应用的根目录
*/
@RequestMapping("/requestMapping")
public String requestMapping(){
System.out.println("requestMapping()....");
return SUCCESS;
}
方法名字和@RequestMapping中的值一样,这里面可以有两种方式:
1当我们在类中RequestMappingTest 上可以加注解也可以不加注解@RequestMapping
当我们加注解的时候比如 @RequestMapping("/springMvc")
那么我们超链接的请求方式为 <a href="springMvc/requestMapping">springMvc/requestMapping</a><br/>
如果不加注解 <a href="requestMapping">requestMapping</a><br/>
2.我们可以使用 method 属性来指定请求方式
@RequestMapping(value = "/testMethod", method = RequestMethod.POST)
public String testMethod() {
System.out.println("testMethod");
return SUCCESS;
}
那么我们超链接的请求方式为
<!--因为被注解是Post请求,本身请求是get,所以请求不到 -->
<a href="springMvc/testMethod">springMvc/testMethod</a><br/>
这样是错误的,正确的方法是要post请求,那么我们可以建一个表单
<form action="springMvc/testMethod" method="post">
<input type="submit">
3.可以使用 params 和 headers 来更加精确的映射请求. params 和 headers 支持简单的表达式
/**
* 可以使用 params 和 headers 来更加精确的映射请求. params 和 headers 支持简单的表达式.
*
* @return
*/
@RequestMapping(value = "testParamsAndHeaders", params = { "username",
"age!=10" }, headers = { "Accept-Language=en-US,zh;q=0.8" })
public String testParamsAndHeaders() {
System.out.println("testParamsAndHeaders");
return SUCCESS;
}
那么我们超链接的请求方式为
<a href="springmvc/testParamsAndHeaders?username=atguigu&age=10">Test ParamsAndHeaders</a>
<br><br> ,headers中的Accept-Language=en-US,zh;q=0.8,我们可以用火狐浏览器按F12可以看到,这个是http协议中
的请求头中的内容,我们也可以指定其他的,我们看下这个超链接肯定是错误的,因为我们方法中设置的是age!=10,而我们是age=10
所以,改过了就可以咯
4@PathVariable 可以来映射 URL 中的占位符到目标方法的参数中.
/**
* @PathVariable 可以来映射 URL 中的占位符到目标方法的参数中.
* @param id
* @return
*/
@RequestMapping("/testPathVariable/{id}")
public String testPathVariable(@PathVariable("id") Integer id) {
System.out.println("testPathVariable: " + id);
return SUCCESS;
}
我们超链接的请求方式为 :
<a href="springMvc/testPathVariable/101">springMvc/testPathVariable/101</a><br/>
5@RequestMapping 还 支持 Ant 格 URL

@RequestMapping("/testAntPath/*/abc")
public String testAntPath() {
System.out.println("testAntPath");
return SUCCESS;
}
我们超链接的请求方式为 :
<a href="springMvc/testAntPath/ddd/abc">springMvc/testAntPath</a><br/>,ddd的值可以是任意的
6.我们来说下rest


我们可以先建一个jsp代码如下:
<form action="springMvc/testRestPut/1" method="Post">
<input type="hidden" name="_method" value="PUT">
<input type="submit" value="testRestPut">
</form><br>
<form action="springMvc/testRestDelete/1" method="Post">
<input type="hidden" name="_method" value="DELETE">
<input type="submit" value="testRestDelete">
</form><br>
<form action="springMvc/testRestPost/1" method="Post">
<input type="submit" value="testRestPost">
</form><br>
<a href="springMvc/testRestGet/1">testRestGet</a><br/>
我们用方法来测试一下:
@RequestMapping(value="/testRestPut/{id}",method=RequestMethod.PUT)
public String testRestPut(@PathVariable Integer id){
System.out.println("testRestPut()..."+id);
return SUCCESS;
}
@RequestMapping(value="/testRestDelete/{id}",method=RequestMethod.DELETE)
public String testRestDelete(@PathVariable Integer id){
System.out.println("testRestDelete()..."+id);
return SUCCESS;
}
@RequestMapping(value="/testRestPost/{id}",method=RequestMethod.POST)
public String testRestPost(@PathVariable Integer id){
System.out.println("testRestPost()..."+id);
return SUCCESS;
}
@RequestMapping("/testRestGet/{id}")
public String testRestGet(@PathVariable Integer id){
System.out.println("testRestGet()..."+id);
return SUCCESS;
}
一一跟上面对应,我们来说明一下,我们知道本来就只有get,post请求,get,post请求我们就不说了
如何将post请求转换成DELETE,和PUT呢,我们要建一个表单,这样才能是post请求,
如果要转换,那么我们要在表单中加入隐藏域,name属性必须为 _method,value的值可以是
DELETE,PUT,为什么是这样呢,我们要有个关键的细节没做,做了在说;我们要在web.xml中加入
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
,我们可以看下HiddenHttpMethodFilter 的源码,Alt +Shirt+T 进入后你们看到有个常量是_method,
所以隐藏域中的name属性必须是name属性必须为 _method,value是post要转换成的值,源码有兴趣的朋友
可以看下,value大小写都没关系,源码中会全部转换成大写,
这样我们用@PathVariable注解就可以传入参数,这样我们就可以进行CRUD了,以前我们学习
webservlet的时候 一般都是delete?id=1 这样,现在不用这样,这样很方便,今天我们就讲到这里。
希望看我博客的朋友继续关注哦,我会把所有学习到的知识全部更在博客上。
注解@RequestMapping 的使用的更多相关文章
- SpringMVC使用注解@RequestMapping映射请求
pringMVC通过使用@RequestMapping注解,实现指定控制器可以处理哪些URL请求. 控制器的类定义及方法定义处都可以标注@RequestMapping: 类定义处:提供初步的请求映射信 ...
- 注解 @RequestMapping
通过RequestMapping注解可以定义不同的处理器映射规则. 1.URL路径映射 @RequestMapping(value="/item")或@RequestMapping ...
- SpringMVC注解@RequestMapping之produces属性导致的406错误
废话不多说,各位,直接看图说话,敢吗?这个问题网上解决的办法写的狠是粗糙,甚至说这次我干掉它完全是靠巧合,但是也不否认网上针对406错误给出的解决方式,可能是多种情况下出现的406吧?我这次的流程就是 ...
- SpringMVC注解@RequestMapping @RequestParam @ResponseBody 和 @RequestBody 解析
SpringMVC Controller层获取参数及返回数据的方式: @RequestMapping @RequestMapping(“url”),这里的 url写的是请求路径的一部分,一般作用在 C ...
- 注解@RequestMapping value 用法
本文引自:https://blog.csdn.net/qq_33811662/article/details/80864784 RequestMapping是一个用来处理请求地址映射的注解,可用于类. ...
- SpringMVC注解@RequestMapping全面解析---打酱油的日子
@RequestMapping 可以出现在类级别上,也可以出现在方法上.如果出现在类级别上,那请求的 url 为 类级别上的@RequestMapping + 方法级别上的 @RequestMappi ...
- SpringMVC注解@RequestMapping
/** * GET 查询 * * @return 视图路径 */ @RequestMapping(value = {"/index&q ...
- Ajax Post提交事例及SpringMVC注解@RequestMapping取不到参数值解决办法
var xmlHttp; //定义变量,用来创建xmlHttp对象 function ajaxfunction(url,onreadystatechangMethod,param){ // 创建xml ...
- springMVC请求注解@RequestMapping各个属性值
最近遇到了一个采用fastJson传输数据的方式,搞了半天,总是感觉模糊,觉得自己有必要在这里做一个系统的总结,今天先从@RequestMapping的属性开始,采用REST 风格的 URL 请求,R ...
随机推荐
- socket编程基础
socket编程 什么是socket 定义 socket通常也称作套接字,用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过套接字向网络发出请求或者应答网络请求. socket起源于Unix ...
- ztree.js的使用整理
/** 配置:知识点管理 */ var setting = { view: { showIcon: false, addDiyDom: addPrevDom, addHoverDom: addHove ...
- javascript面向对象:继承、多态
继承 js中同样可以实现类的继承这一面向对象特性,继承父类中的所有成员(变量和属性),同时可扩展自己的成员,下面介绍几种js中实现继承的方式: 1,对象模仿:通过动态的改变 this 指针的指向,实现 ...
- python 面向对象(类)
面向对象,即是将具备某种共性的事物抽象成一个类(模板),然后再根据类来创建实例对象进行具体的使用. 概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写, ...
- SVN如何查看修改的文件记录] 来源:Linux社区 作者:frogoscar
SVN如何查看修改的文件记录 [日期:2014-11-20] 来源:Linux社区 作者:frogoscar [字体:大 中 小] 主要是有四个命令,svn log用来展示svn 的版本作者 ...
- JUnit4 中@AfterClass @BeforeClass @after @before的区别对比
JUnit4使用Java5中的注解(annotation),以下是JUnit4常用的几个annotation: @Before:初始化方法 对于每一个测试方法都要执行一次(注意与BeforeCla ...
- go智能提示(重要)
使用VIM开发go程序时,智能提示是一个大问题. 最终解决方案是使用 YCM,它是使用 gocode 来进行智能提示的.一切配置好之后,你会发现标准库和第三方库都可以智能提示,但自己写的包却不能,猜想 ...
- [Data Structure & Algorithm] 八大排序算法
排序有内部排序和外部排序之分,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.我们这里说的八大排序算法均为内部排序. 下图为排序 ...
- js的继承
js要实现继承有很多方法,个人总结大致分为三种: function people(){ this.specials = "人类"; } function p1(name){ thi ...
- Alpha总结
一.预期计划 1.时间:11月7日--11月17日 2.小组分工 角色:程序员.美工.文档.测试 这个阶段以编码为主,每个组员参与编码,同时各自根据自己擅长的方面主要负责一个部分. 项目编码工作分工: ...