首先来看下一段代码:
@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请求头包括了若干个属性。server可据此获知client的信息,通过@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就能几乎相同能够用了。