springmvc之@Controller、@RequestMapping等注解讲解
2015-07-12 16:10
441 查看
首先来看下一段代码:
下面对上面几个注解进行简单的说下用法:
类上:提供初步的请求映射信息。相对于 WEB 应用的根目录
方法上:提供进一步的细分映射信息。相对于类定义处的 URL。若类定义处未标注 @RequestMapping,则方法处标记的 URL 相对于WEB 应用的根目录
DispatcherServlet 截获请求后,就通过控制器上
@RequestMapping 提供的映射信息确定请求所对应的处理方法。
@RequestMapping 除了可以使用请求 URL 映射请求外,还可以使用请求方法、请求参数及请求头映射请求。
如果一个请求URL,没有携带name参数,那么该方法就拒绝呗访问。
value:参数名
required: 是否必须。 默认为 true, 表示请求参数中必须包含对应的参数, 若不存在,将抛出异常
浏览器请求:http://127.0.0.1:8080/springmvc/user/findAll?name=123
控制台输出:
123
null
20
浏览器请求:http://127.0.0.1:8080/springmvc/user/findAll
控制台输出:
Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36
JSESSIONID=0E665D80D25F097EB9ECA533F07C3355
浏览器请求:http://127.0.0.1:8080/springmvc/user/findAll
控制台输出:
0E665D80D25F097EB9ECA533F07C3355
这里采用Fiddler测试下,POST请求http://127.0.0.1:8080/springmvc/user/findAll,消息体是:{"name":"test @RequestBody"}
控制台输出:
{"name":"test @RequestBody"}
PS:能掌握上面几个注解,springmvc就能差不多可以用了。
@Controller @RequestMapping("/user") public class UsersController { @RequestMapping(value="/findAll") private String findAll(){ return "index"; } }
下面对上面几个注解进行简单的说下用法:
@Controller
@Controller:表明这个类是一个控制器类。如果用这个注解,需要在spring-mvc配置文件加上这一段,<context:component-scan base-package="com.ztz.springmvc.controller"/>@RequestMapping
@RequestMapping:可以为控制器指定处理可以请求哪些URL请求,@RequestMapping可以定义在类或方法上。类上:提供初步的请求映射信息。相对于 WEB 应用的根目录
方法上:提供进一步的细分映射信息。相对于类定义处的 URL。若类定义处未标注 @RequestMapping,则方法处标记的 URL 相对于WEB 应用的根目录
DispatcherServlet 截获请求后,就通过控制器上
@RequestMapping 提供的映射信息确定请求所对应的处理方法。
@RequestMapping 除了可以使用请求 URL 映射请求外,还可以使用请求方法、请求参数及请求头映射请求。
@RequestMapping 限定请求方法、 请求参数、 请求头
@Controller @RequestMapping("/user") public class UsersController { @RequestMapping(value="/findAll",method=RequestMethod.GET) private String findAll(){ System.out.println("只接受get请求"); return "index"; } }
@Controller @RequestMapping("/user") public class UsersController { @RequestMapping(value="/findAll",method=RequestMethod.POST) private String findAll(){ System.out.println("只接受post请求"); return "index"; } }
@Controller @RequestMapping("/user") public class UsersController { @RequestMapping(value="/findAll",params="name") private String findAll(){ System.out.println("只接受name参数"); return "index"; } }
如果一个请求URL,没有携带name参数,那么该方法就拒绝呗访问。
@Controller @RequestMapping("/user") public class UsersController { @RequestMapping(value="/findAll",headers="Content-Type:text/html;charset=UTF-8") private String findAll(){ System.out.println("只接受请求头中Content-Type为text/html;charset=UTF-8的请求"); return "index"; } }
@RequestParam 绑定请求参数
在处理方法入参处使用 @RequestParam 可以把请求参数传递给请求方法value:参数名
required: 是否必须。 默认为 true, 表示请求参数中必须包含对应的参数, 若不存在,将抛出异常
@Controller @RequestMapping("/user") public class UsersController { @RequestMapping(value="/findAll") private String findAll(@RequestParam(value="name",required=true)String name,//参数name不能为空 @RequestParam(value="sex",required=false)String sex,//参数sex可以为空 @RequestParam(value="age",defaultValue="20")String age){//参数age如果为空,默认值为20 System.out.println(name); System.out.println(sex); System.out.println(age); return "index"; } }
浏览器请求:http://127.0.0.1:8080/springmvc/user/findAll?name=123
控制台输出:
123
null
20
@RequestHeader 获取请求头
一个Http请求头包含了若干个属性,服务器可据此获知客户端的信息,通过@RequestHeader即可将求头中的属性值绑定到处理方法的入参中。@Controller @RequestMapping("/user") public class UsersController { @RequestMapping(value="/findAll") private String findAll(@RequestHeader(value="User-Agent")String user_Agent, @RequestHeader(value="Cookie")String cookie){ System.out.println(user_Agent); System.out.println(cookie); return "index"; } }
浏览器请求:http://127.0.0.1:8080/springmvc/user/findAll
控制台输出:
Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36
JSESSIONID=0E665D80D25F097EB9ECA533F07C3355
@CookieValue 获取cookie值
上面我们获得http请求头的cookie,现在我们直接去获得cookie的值。@Controller @RequestMapping("/user") public class UsersController { @RequestMapping(value="/findAll") private String findAll(@CookieValue(value="JSESSIONID")String cookie){ System.out.println(cookie); return "index"; } }
浏览器请求:http://127.0.0.1:8080/springmvc/user/findAll
控制台输出:
0E665D80D25F097EB9ECA533F07C3355
@RequestBody获取http的body
@Controller @RequestMapping("/user") public class UsersController { @RequestMapping(value="/findAll",method=RequestMethod.POST) private String findAll(@RequestBody(required=true) String body){ System.out.println(body); return "index"; } }
这里采用Fiddler测试下,POST请求http://127.0.0.1:8080/springmvc/user/findAll,消息体是:{"name":"test @RequestBody"}
控制台输出:
{"name":"test @RequestBody"}
PS:能掌握上面几个注解,springmvc就能差不多可以用了。
相关文章推荐
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- spring+html5实现安全传输随机数字密码键盘
- Spring中属性注入详解
- struts2 spring整合fieldError问题
- spring的jdbctemplate的crud的基类dao
- 读取spring配置文件的方法(spring读取资源文件)
- java实现简单美女拼图游戏
- java基本教程之线程休眠 java多线程教程
- JSP开发中在spring mvc项目中实现登录账号单浏览器登录
- 基于Spring框架的Shiro配置方法
- Spring MVC中上传文件实例
- 实例讲解Java的Spring框架中的AOP实现
- 解析Java中如何获取Spring中配置的bean
- Spring的注解配置与XML配置之间的比较
- java Spring整合Freemarker的详细步骤
- Java 二维码,QR码,J4L-QRCode 的资料整理
- java当中的定时器的4种使用方式
- java中 spring 定时任务 实现代码