springmvc常用注解

springmvc常用注解

REST

HTTP 协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET 用来获取资源,POST 用来新建资源,PUT 用来更新资源,DELETE 用来删除资源。

例:

/order/1 HTTP GET :得到 id = 1 的 order

/order/1 HTTP DELETE:删除 id = 1的 order

/order/1 HTTP PUT:更新id = 1的 order

/order HTTP POST:新增 order

HiddenHttpMethodFilter:

浏览器 form 表单只支持 GET与 POST 请求,而DELETE、PUT 等 method 并不支持,Spring3.0 添加了一个过滤器,可以将这些请求转换为标准的 http 方法,使得支持 GET、POST、PUT 与DELETE 请求。

 

Spring MVC 通过分析处理方法的签名,将 HTTP 请求信息绑定到处理方法的相应人参中。

可以对方法及方法入参标注相应的注解(@PathVariable、@RequestParam、@RequestHeader 等)。

@RequestMapping

用作映射请求,为控制器指定指定URL 请求被接受处理,在控制器的类定义及方法定义处都可标注。

DispatcherServlet 截获请求后,就通过控制器上@RequestMapping 提供的映射信息确定请求所对应的处理方法。

@Controller

@RequestMapping("/hello")

public class HelloWorld {

@RequestMapping("/helloworld")

public String hello(){

}

}

@RequestMapping 除了可以指定请求 URL 外,还可以指定其它参数。

@RequestMapping参数:

value:请求URL

method:请求方法

params:请求参数

heads:请求头

consumes:指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;

produces:指定返回值类型,不但可以设置返回值类型还可以设定返回值的字符编码;

params headers支持简单的表达式:

param1: 表示请求必须包含名为 param1 的请求参数

!param1: 表示请求不能包含名为 param1 的请求参数

param1 != value1: 表示请求包含名为 param1 的请求参数,但其值

不能为 value1

{“param1=value1”, “param2”}: 请求必须包含名为 param1 和param2

的两个请求参数,且 param1 参数的值必须为 value1

@RequestMapping(value="/helloworld2",headers={"User-Agent"},params={"username=root","password","!age"},produces="application/json;charset=utf-8",method={RequestMethod.POST,RequestMethod.GET})

@ResponseBody

public User hello2(){

return new User("sdfsdf","sdf","234234@qq.com",1);

}

表示接受请求地址/helloword2,头信息必须包含User-Agent;请求参数中包含username、password,不包含age,并且请求参数username=root;接受请求处理的内容为json;返回的内容类型为json类型,并且是utf-8编码;请求方法是post

 

@RequestMapping 支持的 Ant 风格的 URL:

?:匹配文件名中的一个字符

*:匹配文件名中的任意字符

**:** 匹配多层路径

例:

/user/*/createUser: 匹配/user/aaa/createUser、/user/bbb/createUser 等 URL

/user/**/createUser: 匹配 /user/createUser、/user/aaa/bbb/createUser 等 URL

/user/createUser??: 匹配 /user/createUseraa、/user/createUserbb 等 URL

@PathVariable

带占位符的 URL 是 Spring3.0 新增的功能。

通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable("xxx") 绑定到操作方法的入参中。

@RequestMapping("/delete/{id}")

public String hello3(@PathVariable Integer id){

return "";

}

@RequestParam

可以把请求参数传递给请求方法。

@RequestMapping("/hello")

public String hello4(@RequestParam(value="id",required=true) Integer id){

return "";

}

@RequestHeader

可将请求头中的属性值绑定到处理方法的入参中。

@RequestMapping("/hello")

public String hello4(@RequestHeader(value="id",required=true) Integer id){

return "";

}

@CookieValue

可让处理方法入参绑定某个 Cookie 值。

@RequestMapping("/hello")

public String hello4(@CookieValue(value="id",required=true) Integer id){

return "";

}

使用 POJO 对象绑定请求参数值

Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配,自动为该对象填充属性值。支持级联属性。如:dept.deptId、dept.address.tel 等

/hello?dept.deptId=1&dept.address.tel=18000000

@SessionAttributes

@SessionAttributes: 将模型中的某个属性暂存到HttpSession 中,以便多个请求之间可以共享这个属性

@SessionAttributes 除了可以通过属性名指定需要放到会话中的属性外,还可以通过模型属性的对象类型指定。

@SessionAttributes(value={"user"}, types={String.class})

@RequestMapping("/springmvc")

@Controller

public class SpringMVC {

}

session属性获取:

方式一:

@RequestMapping("/testSessionAttributes2")

@ResponseBody

public User testSessionAttributes2(@ModelAttribute("user") User user){

return user;

}

方式二:

@ResponseBody

public User testSessionAttributes2(Map<String, Object> map,SessionStatus sessionStatus){

System.out.println(sessionStatus);

return (User) map.get("user");

}

@ModelAttribute

方法入参标注该注解后, 入参的对象就会放到数据模型中。

有 @ModelAttribute 标记的方法, 会在每个目标方法执行之前被 SpringMVC 调用!

在方法定义上使用 @ModelAttribute 注解:Spring MVC 在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute 的方法。

  1. 从隐含对象中获取隐含的模型数据中获取对象,再将请求参数绑定到对象中,再传入入参
  2. 将方法入参对象添加到模型中
@ModelAttribute

public void getUser(@RequestParam(value="id",required=false) Integer id,

Map<String, Object> map){

}

 

在标注了@SessionAttribute的类上,如果在会话中找不到对应的属性,则抛出 HttpSessionRequiredException 异常。所以@SessionAttribute可以配合@ModelAttribute使用。

@InitBinder

由 @InitBinder 标识的方法,可以对 WebDataBinder 对象进行初始化。WebDataBinder 是 DataBinder 的子类,用于完成由表单字段到 JavaBean 属性的绑定@InitBinder方法不能有返回值,它必须声明为void。@InitBinder方法的参数通常是是 WebDataBinder。

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值