首先来看下一段代码:

@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就能几乎相同能够用了。

springmvc之@Controller、@RequestMapping等注解解说的更多相关文章

  1. SpringMVC的controller方法中注解方式传List参数使用@RequestBody

    在SpringMVC控制器方法中使用注解方式传List类型的参数时,要使用@RequestBody注解而不是@RequestParam注解: //创建文件夹 @RequestMapping(value ...

  2. SpringMVC中 Controller的 @ResponseBody注解分析

    需求分析:需要 利用    out 对象返回给财付通是否接收成功 .那么将需要如下代码: /** * 返回处理结果给财付通服务器. * @param msg: Success or fail. * @ ...

  3. SpringMVC常用注解實例詳解1:@Controller,@RequestMapping,@RequestParam,@PathVariable

    我的開發環境 框架:        springmvc+spring+freemarker 開發工具: springsource-tool-suite-2.9.0 JDK版本: 1.6.0_29 to ...

  4. SpringMVC中@Controller和@RequestMapping用法和其他常用注解

    一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Mo ...

  5. SpringMVC中@Controller和@RequestMapping用法和其他常用注解(转)

    一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Mo ...

  6. SpringMVC 基于注解的Controller @RequestMapping @RequestParam..

    概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Spring 2.5 又为 Spring MVC 引入了注解驱动功能.现在你无须让 Controller 继承任何接口,无需在 ...

  7. spring mvc 注解@Controller @RequestMapping @Resource的详细例子

    现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了.不过 ...

  8. spring mvc:内部资源视图解析器2(注解实现)@Controller/@RequestMapping

    spring mvc:内部资源视图解析器2(注解实现)  @Controller/@RequestMapping 访问地址: http://localhost:8080/guga2/hello/goo ...

  9. spring mvc:内部资源视图解析器(注解实现)@Controller/@RequestMapping

    spring mvc:内部资源视图解析器(注解实现)@Controller/@RequestMapping 项目访问地址: http://localhost:8080/guga2/hello/prin ...

随机推荐

  1. Oracle_exp/expdp备份

    目录索引 1.exp和expdp的区别 2.expdp导出数据库流程 一.↓↓exp和expdp的区别↓↓ 1.exp和expdp最明显的区别就是导出速度的不同.expdp导出是并行导出(如果把exp ...

  2. BZOJ 4565 状压DP

    思路: f[i][j][S]表示从i到j压成S状态 j-m是k-1的倍数 $f[i][j][S<<1]=max(f[i][j][S<<1],f[i][m-1][S]+f[m][ ...

  3. “阻塞”与"非阻塞"与"同步"与“异步"

    链接:http://www.zhihu.com/question/19732473/answer/20851256来源:知乎 “阻塞”与"非阻塞"与"同步"与“ ...

  4. 大白话理解cookie

    HTTP协议是一个无状态的协议,服务器无法区分出两次请求是否发送自同一服务器. 需要通过会话控制来解决这个问题,会话控制主要有两种方式Cookie 和 Session. Cookie就是一个头,Coo ...

  5. 【Linux】ubuntu中怪异的vi编辑器

    由于前几天一场windows系统的比特币勒索病毒,我下狠心装了Linux的ubuntu版本.可是今天在使用命令行中的vi编辑器时出现了怪异的现象:backspace不能删除,编辑模式回车随机出现字母. ...

  6. centos开机运行级别更改

    1.使用命令切换运行级别/目标 # systemctl isolate multi-user.target //切换到运行级别3,该命令对下次启动无影响,等价于telinit 3 # systemct ...

  7. 通过Git向Github提交代码(Windows系统)

    1.新建项目 在GitHub选择并创建一个项目.首先,登录 GitHub,单击页面右上角加号“+” ,选择“New repository” 选项. 填写项目名称及描述,默认项目为“Public”,如果 ...

  8. 11.5 【Linq 】连接

    11.5.1 使用 join 子句的内连接 如果你打算把一个巨大的序列连接到一个极小的序列上,应尽可能把小序列作为右边序列 class Program { static void Main(strin ...

  9. [置顶] tcpflow 抓包

    转自:  http://www.rwifeng.com/jekyll/update/2015/04/16/how-to-tcpflow/ tcpflow 抓包 Apr 16, 2015 大家都知道 t ...

  10. 一张图搞懂javascript原型链

    js高级里面原型链对于新手来说并不友好,总的来说就是 任何函数都有自己的原型对象(prototype),任何实例对象都__proto__指向构造函数的原型 先来个最简单的原型三角关系 var fn = ...