【学习】springmvc之@RequestMapping映射请求
来源:互联网 发布:mysql 按月份查询 编辑:程序博客网 时间:2024/05/18 17:23
1、使用简单的@RequestMapping映射请求
使用@RequestMapping注释来将URL映射/appointments到整个类或特定的处理程序方法。通常,类级注释将特定的请求路径(或路径模式)映射到表单控制器上,其他方法级注释缩小了特定HTTP方法请求方法(“GET”,“POST”等)的主映射,或HTTP请求参数条件。@RequestMapping一般都与@Controller配合使用
先看看下面的一个简单的控制器
package com.spring.mvc;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;@Controller@RequestMapping(value="front")public class FrontController {@RequestMapping(value="index")public String index(){System.out.println("index.......");return "index";}@RequestMapping(value="welcom")public String welcom(){System.out.println("welcom..........");return "welcom";}}
上面的控制器有三处@RequestMapping,他们的value分别为front,index,welcom
首先看看value=front的@RequestMapping标签,其作用在类名上面,表明访问此控制的父级路径为front,相对而言访问其他的@RequestMapping是访问对应方法的路径
比如访问index()方法的路径为:/front/index
2、使用@RequestMapping处理POST、GET、PUT请求;
示例一、每一个请求都设置相应的请求方式
package com.spring.mvc;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;@Controller@RequestMapping(value="front")public class FrontController {@RequestMapping(value="get",method=RequestMethod.GET)public String get(){System.out.println("index.......");return "index";}@RequestMapping(value="post",method=RequestMethod.POST)public String post(){System.out.println("welcom..........");return "index";}@RequestMapping(value="put",method=RequestMethod.PUT)public String put(){System.out.println("put............");return "index";}}
示例二、一个请求对应多个请求方式
package com.spring.mvc;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;@Controller@RequestMapping(value="front")public class FrontController {@RequestMapping(method=RequestMethod.GET)public String get(){System.out.println("index.......");return "index";}@RequestMapping(method=RequestMethod.POST)public String post(){System.out.println("welcom..........");return "index";}@RequestMapping(method=RequestMethod.PUT)public String put(){System.out.println("put............");return "index";}}或者这样
package com.spring.mvc;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;@Controller@RequestMapping(value="front")public class FrontController {@RequestMapping(value="index",method=RequestMethod.GET)public String get(){System.out.println("get.......");return "index";}@RequestMapping(value="index",method=RequestMethod.POST)public String post(){System.out.println("post..........");return "index";}}
3、同一个方法映射多个请求
示例一、@RequestMapping中value参数可以是一个固定的String类型数组
package com.spring.mvc;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;@Controller@RequestMapping(value="front")public class FrontController {@RequestMapping(value={"/","post","get","put"})public String index(){System.out.println("Hello Word!");return "index";}}
4、带有@RequestParam的@RequestMapping
@RequestParam 注解配合 @RequestMapping 一起使用,可以将请求的参数同处理方法的参数绑定在一起。
@RequestParam 注解使用的时候可以有一个值,也可以没有值。这个值指定了需要被映射到处理方法参数的请求参数,
示例一、
package com.spring.mvc;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;@Controller@RequestMapping(value="front")public class FrontController {@RequestMapping(value="index")public String index(@RequestParam(value="str") String message){System.out.println("str:"+message);return "index";}}
如果@RequestParam的value值与参数名称一致可以省略不写,如上面示例的代码只接受的请求中带有str参数的请求
如果想要不带参数的也访问那么就得使用参数required
示例二、
package com.spring.mvc;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;@Controller@RequestMapping(value="front")public class FrontController {@RequestMapping(value="index")public String index(@RequestParam(value="str",required=false) String message){System.out.println("str:"+message);return "index";}}如果没带参数str或者参数str为空让其有默认值怎么办,使用@RequestParam的defaultValue属性给其加上默认值
package com.spring.mvc;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;@Controller@RequestMapping(value="front")public class FrontController {@RequestMapping(value="index")public String index(@RequestParam(value="str",required=false,defaultValue="Hi!") String message){System.out.println("str:"+message);return "index";}}
5、@RequestMapping元素之produces和consumes(很少用)
可以使用 @RequestMapping 注解的 produces 和 consumes 这两个元素来缩小请求映射类型的范围
为了能用请求的媒体类型来产生对象, 你要用到 @RequestMapping 的 produces 元素再结合着 @ResponseBody 注解。
你也可以利用 @RequestMapping 的 comsumes 元素再结合着 @RequestBody 注解用请求的媒体类型来消费对象。
示例一、
package com.spring.mvc;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;@Controller@RequestMapping(value="frontIndex")public class FrontIndexController {@RequestMapping(value="index",produces={"application/JSON"})public String index(){return "index";}@RequestMapping(value="welcom",consumes={"application/JSON","application/XML"})public String welcom(){return "index";}}在这段代码中, getProduces() 处理方法会产生一个 JSON 响应, getConsumes() 处理方法可以同时处理请求中的 JSON 和 XML 内容。
6、带有消息头(header)的@RequestMapping请求
用@ReauestMapping只接收带有某种或某些header的请求,参数headers是一个String类型的数组
示例:
@RequestMapping(value="welcom",headers={"content-type=text/plain"})public String welcom(){System.out.println("welcom...............");return "index";}
7、@RequestMapping映射动态请求
什么是动态请求:举个例子,一个WEB网站保存用户的图片的路径是:img/id/upload,其中id是用户的唯一标识,那么就会产生以下数据:img/10001/upload、img/10002/upload、img/10003/upload...怎样用请求来映射这个路径、将id作为参数传过来组合使用的请路过。。
使用@RequestMapping可以动态的接收请求
示例一、
@RequestMapping(value="img/{id}/upload")public String go(){System.out.println("Hello Word!");return "index";}使用上面方法可能还不能满足我们开发需求,比如:我们要知道是谁访问了这个路径该怎么办,那么我就必须要获取这个id的值了,springmvc给我们提供了@PathVariable注解
示例二、
@RequestMapping(value="img/{id}/upload")public String go(@PathVariable String id){System.out.println("id="+id);return "index";}
使用上面两个例子可能还不能解决我们的开发需求,比如:有一些VIP用户的id是UUID,普通用户是纯数字id,这个请求只能处理vip用户的该怎么,@RequestMapping注解
可以和正则表达式一起使用
示例三、
@RequestMapping(value="img/{id:[0-9a-z]{32}}/upload")public String go(@PathVariable String id){System.out.println("id="+id);return "index";}
UUID生成的方法:
/** * 封装JDK自带的UUID, 通过Random数字生成, 中间无-分割. */public static String uuid() {return UUID.randomUUID().toString().replaceAll("-", "");}
8、@RequestMapping默认处理方法
示例一、
package com.spring.mvc;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;@Controller@RequestMapping(value="img")public class ImgController {/** * 默认处理方法 * */@RequestMapping()public String index(){System.out.println("默认处理方法");return "index";}/** * 进入用户首页 **/@RequestMapping(value = "userIndex")public String userIndex(){System.out.println("进入用户首页");return "index";}}
9、@RequestMapping与@ResponseBody搭配使用
使用@RequestMapping注解方法时,返回String类型,视图解析器(后面学习)会帮你找到相应的页面,但是有时候不需要返回到页面,只是返回String类型的数据到页面。如:用户在
修改密码的时候,提示其与原密码不符合;这个时候就需要@ResponseBody帮助我们,不让视图解析器解析这个String类型;
示例一、
@ResponseBody@RequestMapping(value="welcom")public String welcom(){System.out.println("welcom...............");return "[{flag:'success',message:'原密码不匹配'}]";}Ajax提交数据一般都会与@ResponseBody一起使用,大多数返回类型都是json字符串,或者是对象
示例二、
@ResponseBody@RequestMapping(value="welcom")public JsonResult welcom(){JsonResult jr = new JsonResult();jr.setFlag("success");jr.setMessage("原密码不符合");return jr;}
JsonResult
package com.spring.mvc;public class JsonResult {private String flag;private String message;private Object data;public String getFlag() {return flag;}public void setFlag(String flag) {this.flag = flag;}public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}}10、spring4.3以上的@RequestMaping的快捷方式
Spring 4.3 引入了方法级注解的变体,也被叫做 @RequestMapping 的组合注解。组合注解可以更好的表达被注解方法的语义。它们所扮演的角色就是针对 @RequestMapping 的封装,而且成了定义端点的标准方法。
例如,@GetMapping 是一个组合注解,它所扮演的是 @RequestMapping(method =RequestMethod.GET) 的一个快捷方式。
方法级别的注解变体有如下几个:
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
如下代码展示了如何使用组合注解:
package com.spring.mvc;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.PutMapping;import org.springframework.web.bind.annotation.RequestMapping;@Controller@RequestMapping(value="index")public class IndexController {@PostMapping(value="index")public String post(){System.out.println("post");return "index";}@GetMapping(value="index")public String get(){System.out.println("get");return "index";}@PutMapping(value="index")public String put(){System.out.println("put");return "index";}}
总结(重要):此篇文章是我结合spring的官方API文档和开源中国微信公众号发布的一篇文章整理出来的,如有不对请指出。
微信文章地址:https://mp.weixin.qq.com/s/uZzwmJb5ewukkawi0UIzYw
- 【学习】springmvc之@RequestMapping映射请求
- SpringMVC学习(二) @RequestMapping映射请求
- springmvc @RequestMapping映射请求
- SpringMVC学习(2):使用@RequestMapping映射请求方式
- 10003---SpringMVC 使用@RequestMapping映射请求
- SpringMVC入门(二)--使用@RequestMapping映射请求
- SpringMVC使用注解@RequestMapping映射请求
- SpringMVC-2 使用@RequestMapping映射请求
- SpringMVC源码(十)RequestMapping请求映射
- sprinmvc之@requestMapping映射请求通配符
- 学习SpringMVC(二)之RequestMapping
- 使用RequestMapping映射请求
- 使用 @RequestMapping 映射请求
- 使用 @RequestMapping 映射请求
- 使用@RequestMapping映射请求
- 使用@RequestMapping 映射请求
- SpringMVC学习(二)之@RequestMapping
- SpringMVC学习笔记(四):地址映射RequestMapping
- MATLAB基础
- python模拟登陆豆瓣网和验证码识别
- Linux命令集锦(Ubuntu)
- xampp版本和具体的php,mysql版本的对应
- mysql基准测试-sysbench
- 【学习】springmvc之@RequestMapping映射请求
- 推荐一些经过实践检验的学习方法
- 属性(4)
- CCF 201312-1出现次数最多的数
- vue 星空背景图 组件
- HDU 3062 Party 2
- python使用requirements.txt批量安装包
- C#调用GhostScript,O2S.Components转换PDF为图片
- 百度API 常用接口demo