SpringMVC常用注解总结
Posted 流楚丶格念
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC常用注解总结相关的知识,希望对你有一定的参考价值。
文章目录
越学越乱,哎,根据用到的,按照用的顺序总结下吧
首先放在最上面的就是@Controller用于声明这是个SpringBean
类与方法上
@Controller
@Controller注解是开发中最常使用的注解,它的作用有两层含义:
- 告诉Spring,被该注解标注的类是一个Spring的Bean,需要被注入到Spring的上下文环境中。
- 该类里面所有被RequestMapping标注的注解都是HTTP服务端点。
和@Controller的作用类似的就是这个@RestController了
例如:
@Controller
public class UserController
......
@ResponseBody
@ResponseBody修饰返回值,注解用于在HTTP的body中携带响应数据,默认是使用JSON的格式。如果不加该注解,spring响应字符串类型,是跳转到模板页面或jsp页面的开发模式。
@ResponseBody用于将 Controller方法返回的对象, 通过HttpMessageConverter转换为指定格式后,写入到 Respons对象的 body数据区。
@Responsebody注解将方法的返回结果直接 写入 Http 响应正文中,一般在异步获取数据时使用。在使用@RequestMapping 注解时, 返回值通常被解析为跳转路径,在加上@Responsebody 后返回结果就不会被解析为跳转 路径, 而是直接写入到 HTTP 响应正文中。
@RequestMapping:
@RequestMapping作用:该注解的作用就是设置当前控制器方法请求访问路径,如果设置在类上统一设置当前控制器方法请求访问路径前缀。
属性:
参数 | 说明 |
---|---|
method | 是让你指定请求的method的类型,比如常用的有get和post。 |
value | 是指请求的实际地址,如果是多个地址就用来指定就可以啦。 |
produces | 指定返回的内容类型,当request请求头中的Accept类型中包含指定的类型才可以返回的。 |
consumes | 指定处理请求的提交内容类型,比如一些json、html、text等的类型。 |
headers | 指定request中必须包含那些的headed值时,它才会用该方法处理请求的。 |
params | 指定request中一定要有的参数值,它才会使用该方法处理请求。 |
例如下面用法:
- 类上方配置的请求映射与方法上面配置的请求映射连接在一起,形成完整的请求映射路径:/user/save
@Controller
//类上方配置的请求映射与方法上面配置的请求映射连接在一起,形成完整的请求映射路径
@RequestMapping("/user")
public class UserController
//请求路径映射
@RequestMapping("/save") //此时save方法的访问路径是:/user/save
public String save()
......
小案例
上面三个注解的综合应用如下所示:
//定义表现层控制器bean
@Controller
@RequestMapping("/user")
public class UserController
//设置映射路径为/save,即外部访问路径
@RequestMapping("/save")
//设置当前操作返回结果为指定json数据(本质上是一个字符串信息)
@ResponseBody
public String save()
System.out.println("user save ...");
return "'info':'springmvc'";
我们请求:/user/save
,就能返回'info':'springmvc'
的json格式数据
@PostMapping…
method参数中可以配置其他的请求方式例如
@RequestMapping(value = "/user", method = POST)
另外:还有其他四个Mapping注解可以直接说明请求方式,例如post
@PostMapping(value = "/user")
上面代码中两种写法起到的是一样的效果,也就是PostMapping等同于@RequestMapping的method为POST的情况。
同理:@GetMapping、@PutMapping、@DeleteMapping也都是简写的方式。
@PostMapping
@GetMapping
@PutMapping
@DeleteMapping
这个在RESTful风格中应用较多,以后再讲
@RestController
@RestController相当于 @Controller+@ResponseBody。
它有两个作用:
- 作为Controller的作用,将控制器类注入到Spring上下文环境,该类RequestMapping标注方法为HTTP服务端点。
- 作为ResponseBody的作用,请求响应默认使用的序列化方式是JSON,而不是跳转到jsp或模板页面
(现在项目都是前后端分离了,除了一些特定需求,也基本不用返回页面了,所以一般就用 @RestController 替换 @Controller+@ResponseBody 了,方便)
将上面案例改造一下,就可以写成:
//定义表现层控制器bean,设置当前操作返回结果为指定json数据(本质上是一个字符串信息)
//使用@RestController注解替换@Controller与@ResponseBody注解,简化书写
@ResponseBody
@RequestMapping("/user")
public class UserController
//设置映射路径为/save,即外部访问路径
@RequestMapping("/save")
public String save()
System.out.println("user save ...");
return "'info':'springmvc'";
参数上
@RequestParam:
作用:是将请求参数绑定到你的控制器的方法参数上,是Spring MVC中的接收普通参数的注解。
属性:
参数 | 说明 |
---|---|
value | 请求参数中的名称。 |
required | 请求参数是否必须提供参数,它的默认是true,意思是表示必须提供。 |
例如下面代码:
//普通参数:请求参数名与形参名不同时,使用@RequestParam注解关联请求参数名称与形参名称之间的关系
@RequestMapping("/userinfo")
@ResponseBody
public String commonParamDifferentName(@RequestParam("name") String userName)
System.out.println("普通参数传递 userName ==> "+userName);
return "'module':'sanme param different name'";
这样请求中的name参数就能接收到userName字符串对象中了,下面再用就用userName就行。
PS:当然,如果你接收的对象名与传入参数的名相同,他能自动封装,不用写这个(或者请求参数key的名称和POJO中属性的名称一致,也能进行封装)
@RequestBody:
@RequestBody作用:用于读取 Request 请求的 body 部分数据,使用系统默认配置的 HttpMessageConverter 进行解析,然后把相应的数据绑定到 Controller 方法的参数上。@RequestBody默认是使用JSON的格式
属性:required,是否必须有请求体。它的默认值是true,在使用该注解时,值得注意的当为true时
例如下面请求与代码:
//POJO参数:json格式
//使用@RequestBody注解将外部传递的json数据映射到形参的实体类对象中,要求属性名称一一对应
@RequestMapping("/user")
@ResponseBody
public String pojoParamForJson(@RequestBody User user)
System.out.println("pojo(json)参数传递 user ==> "+user);
return "'module':'pojo for json param'";
这样就能接收到json类型的参数并且转化为相应的POJO
那么我们之前不是用了 @RequestParam接收参数吗,为什么还来个body?
这是因为在发展后期,也就是现在的前后端分离开发中,发送json格式数据为主,@RequestBody应用较广,下面我们来区分一下这两个大兄弟
@RequestBody与@RequestParam区别
区别
- @RequestParam用于接收url地址传参,表单传参【application/x-www-form-urlencoded】
- @RequestBody用于接收json数据【application/json】
应用
- 前后端分离开发中,发送json格式数据为主,@RequestBody应用较广
- 如果发送非json格式数据,选用@RequestParam接收请求参数
@DateTimeFormat
例如下面传的日期类型数据,基于系统不同格式也不尽相同
2058-08-18
2058/08/18
08/18/2058
那么我们怎么接收呢?接收后怎么处理成统一格式呢?
这就要用到我们的@DateTimeFormat注解,作用:接收形参时,根据不同的日期格式设置不同的接收方式,简单来说就是可以设定日期时间型数据格式
例如下面请求与代码示例:
http://localhost:80/dataParam?date=2058/08/08&date1=2058-08-18&date2=2058/08/28 8:08:08
controller代码如下:
//使用@DateTimeFormat注解设置日期类型数据格式,默认格式yyyy/MM/dd
@RequestMapping("/dataParam")
@ResponseBody
public String dataParam(Date date,
@DateTimeFormat(pattern="yyyy-MM-dd") Date date1,
@DateTimeFormat(pattern="yyyy/MM/dd HH:mm:ss") Date date2)
System.out.println("参数传递 date ==> "+date);
System.out.println("参数传递 date1(yyyy-MM-dd) ==> "+date1);
System.out.println("参数传递 date2(yyyy/MM/dd HH:mm:ss) ==> "+date2);
return "'module':'data param'";
打印出来默认是的yyyy/MM/dd
格式,其他均是设定的格式
@PathVaribale:
作用:作用:绑定路径参数与处理器方法形参间的关系,要求路径参数名与形参名一一对应。
它是Spring MVC支持的REST风格url的一个重要的标志。
@RequestBody、@RequestParam、@PathVariable区别和应用
区别
- @RequestParam用于接收url地址传参或表单传参
- @RequestBody用于接收json数据
- @PathVariable用于接收路径参数,使用参数名称描述路径参数
应用
- 后期开发中,发送请求参数超过1个时,以json格式为主,@RequestBody应用较广
- 如果发送非json格式数据,选用@RequestParam接收请求参数
- 采用RESTful进行开发,当参数数量较少时,例如1个,可以采用@PathVariable接收请求路径变量,通常用于传递id值
以上是关于SpringMVC常用注解总结的主要内容,如果未能解决你的问题,请参考以下文章