一、@RequestMapping
解释:RequestMapping是一个用来处理请求地址映射的注解(将请求映射到对应的控制器方法中),可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。(当项目比较大,服务模块比较多,为了方便区分控制器中的方法,可以通过类上加入该注解来进行区分)
属性:
value:指定请求的实际url(支持ant风格、可以含正则表达式、支持或关系)。
method:指定请求的method类型:GET、POST、PUT、DELETE。
params:指定request中必须包含某些参数值是,才让该方法处理。
headers:指定request中必须包含某些指定的header值,才能让该方法处理请求(headers的查看可通过浏览器--按F12--NetWork进行查看Headers的信息,如下图)。
consumes:指定处理请求的提交内容类型(Content-Type),例如application/json, text/html(如下图方式查看)。
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回(如下图方式查看)。
实例:
- /** * @RequestMapping 实例! * 请求地址:http://localhost:8080/(随意一个字符)test1?username=aaa&age=12 * 或者请求地址:http://localhost:8080/test(随意多个字符)?username=aaa&age=12 */ @RequestMapping(value={"?test1","test*"} , method={RequestMethod.GET,RequestMethod.POST}, params={"username:\\d+","age!=1"}, headers={"Content-Language!=en"}, consumes ={"application/json","text/html"}, produces ={"application/json"}) public String testRequestMapping(){ System.out.println("testRequestMapping"); return SUSSECC; } -
二、@RequestParam
解释:绑定单个页面请求来的参数值,用于将请求参数区数据映射到功能处理方法的参数上。
属性:
value:入参的请求参数名字,如username表示请求的参数区中的名字为username的参数的值将传入。
required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将抛出异常。
defaultValue:默认值,表示如果请求中没有同名参数时的默认值,设置该参数时,自动将required设为false。
实例:
- /** * @RequestParam 实例! * 请求地址:http://localhost:8080/test1?username=aaa */ @RequestMapping(value={"test1"}) public String testRequestParam( @RequestParam(value="username", required = false, defaultValue = "无") String username){ System.out.println("testRequestParam"+username); return SUSSECC; } -
三、@PathVariable
解释:绑定URL模板变量值,用于将请求URL中的模板变量映射到功能处理方法的参数上。
属性:
value:入参的请求参数名字,如username表示请求的参数区中的名字为username的参数的值将传入。
required:是否必须,默认是true,表示请求中一定要有相应的参数,否则将抛出异常。
实例:
- /** * @PathVariable 实例! * 请求地址:http://localhost:8080/test1/aaa */ @RequestMapping(value={"test1/{username}"}) public String testPathVariable( @PathVariable(value="username", required = false) String username) { System.out.println("testPathVariable"+username); return SUSSECC; } -
四、@ModelAttribute
解释:ModelAttribute可以应用在方法参数上或方法上,他的作用主要是当注解在方法参数上时会将注解的参数对象添加到Model中;当注解在请求处理方法Action上时会将该方法变成一个非请求处理的方法,但其它Action被调用时会首先调用该方法。
属性:
value:绑定模型中的key。
binding:控制数据绑定,默认是true。
实例:
- /** * @ModelAttribute 实例! * 页面取值:${requestScope.Name};显示:mark */ @ModelAttribute public void testModelAttribute(Model model) { model.addAttribute("Name","mark"); } /** *页面取值:${requestScope.aaa};显示:mark */ @ModelAttribute(value="aaa",binding = false) public String testModelAttribute2() { return "mark"; } /** *页面取值:${requestScope.user.name};显示:mark */ @ModelAttribute public User testModelAttribute1() { User user = new User(); user.setName("mark"); return user; } /** * 和上面返回User方法对应,如果直接返回实体类User则下面方面中的值应该是该实体的首字母小写 *页面取值:${requestScope.user.name};显示:mark111 */ @RequestMapping(value={"test1"}) public String testModelAttribute3(@ModelAttribute("user") User user) { user.setName("mark111"); return SUSSECC; } -
五、@SessionAttributes
解释:在默认情况下,Model中的属性作用域是 request 级别是,也就是说,当本次请求结束后,Model中的属性将销毁。如果希望在多个请求中共享 Model中的属性,必须将其属性转存到 session 中,这样 Model的属性才可以被跨请求访问。
属性:
1、value:这是一个字符串数组,里面应写需要存储到session中数据的名称。
2、types:根据指定参数的类型,将模型中对应类型的参数存储到session中。
实例:
- /** * 页面取值:${requestScope.user1.name};显示:mark111 */ @SessionAttributes(value="user",types ={User.class}) public class Test { @RequestMapping(value = {"test1"}) public String testSessionAttributes(Model model) { User user = new User(); user.setName("mark111"); model.addAttribute("user1", user); return SUSSECC; } } -
六:@Responsebody与@RequestBody
解释:(可以分开使用)
Responsebody:表示该方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中,一般在异步获取数据时使用。
RequestBody:将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。
实例:
- /** * 将请求中的 datas 写入 User 对象中 */ @RequestMapping(value = "test1") @ResponseBody public User login(@RequestBody User user) { // 不会被解析为跳转路径,而是直接写入 HTTP 响应正文中 return user; } -
七:@Controller
解释:控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。
八:总结
将这些注解学习完之后并且通过例子进行了实践,也有类似的注解之间的对比过程,相信以后用的时候就会很方便了。