SpringMVC中常用的注解使用介绍(带案例)

springmvc官方文档:https://docs.spring.io/spring-framework/docs/current/javadoc-api/

本篇文章主要介绍一下 @Controller、@GetMapping、@PostMapping、@RequestMapping、@RestController、@RequestBody、@ResponseBody 、@PathVariable、@RequestParam注解

1.@Controller

直接写在Controller层的类上面,主要负责处理前端控制器(DispatcherServlet )发过来的请求,经过业务逻辑层处理之后封装层一个model,并将其返回给view进行展示。(加了@Controller注解后就不用去实现Controller接口了)

2.@GetMapping,postMapping,@RequestMappig注解

get请求就用GetMapping,post请求用PostMapping,RequestMapping是两种请求都支持,其中,如果没有指定,SpringMVC会根据前端表单请求的类型自动判断,平时默认是get请求。

以requestMapping请求为例,其中有一些常见的参数

①value和path:这两个参数源码点进去发现其实都是一样的。都是用来指定路径,比如下面path=“/test”,那么访问这个方法的路径就是http://localhost:9090/test,其中9090是端口号。

补充:@AliasFor注解是用来表示这两个属性完全相同,相当于是别名,且不能同时出现,两个属性可以通过对方来取值

img

img

②produces是指定返回内容类型如 produces = “application/json;

③method指定请求类型,主要有 GET、PUT、POST、DELETE,默认为 GET

④charset:用来防止中文乱码,charset=UTF-8”

⑤params注解用于限定url访问的条件,比如下图中的params,表示url中username=root且passwd!=10时才能正确访问

img

img

img

2.@ResponseBody注解

用了@ResponseBody注解的方法不会走视图解析器,如果返回值是字符串那么会直接在页面上打印这个字符串,如果是

img

3.@RestController

@RestController注解相当于@ResponseBody和@Controller的结合

4.@RequestBody

GET方式无请求体所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。

注意:一个请求,只能用一个RequestBody;可以有多个RequestParam

如果参数是放在请求体中,传入后台的话,那么后台要用@RequestBody才能接收到;如果不是放在请求体中的话,那么后台接收前台传过来的参数时,要用@RequestParam()来接收,或则形参前什么也不写也能接收。

见下面注册功能的例子,ajax传入数据到后台,当@RequestBody修饰的形参是String类型的时候和Map类型恶的时候打印出来的值分别如下,可见,如果是形参是String,那么会把data转为字符串,如果是Map的话就会转为对应的map类型封装成key-value的形式(平时Map用的比较多)

img

5.@RequestParam

这里可以看一下源码,RequestParam里面其实有四个参数,其中name和value互为别名,作用相同,所以最多只能写三个,其中:

name/value :这个属性指定的值和url中传入参数的key的值要相同才能传入形参,如果没有这个参数的话那么形参的变量名要和url中的参数名字一样

required:决定这个参数是否是必要的,默认值为true

defaultValue:决定默认值(如果有设置这个属性的话,required会失效,因为有默认值就代表required=true)

img

下面是官方文档对四个参数的解释

img

比如下面这个例子,有对形参id做配置,对name不做配置,测试结果如果

@ResponseBody 
@RequestMapping(path = "/test") 
public String test(@RequestParam String name,@RequestParam(value = 			   "ids",required =true,defaultValue = "1") String id){   
  System.out.println("name="+name);    
  System.out.println("ids="+id);  
  return "123";
  }

①url正常:正常打印

img

②url中没有id,那么输出的id为默认值

img

③url中name没有指定值,那么返回的就是null(因为他没有默认值,且name不能不写,因为默认required为true)

img

6.@PathVariable

表示方法参数应绑定到URI模板变量的注释,该注解有三个属性(源码见下图):

①name/value:用于指定url中绑定要绑定的变量

②required:决定变量是否必须,默认为true

img

用法举例:

path中的name和形参中的name绑定,path中的ids和形参id绑定,然后测试的时候url中如果两个参数值都给了,那么测试正常,但是如果只给一个参数的话会发现required失效的情况

img

此时会发下required失效了,只给一个参数不行

img

解决required失效的方法:添加多个path

img

测试结果如下,id没有赋值的时候值为空

img

注意:如果没有指定required,那么默认为true,这时下面这种给出多个path的写法是错了,此时测试结果如下

img

此外,PathVariable还支持这种参数是map<String,String>,此时可以直接通过get(占位符)取到对应值

示例如下:img

7.@RequestAttribute
可以直接用@RequestAttribute来获取到Request域中存在的值
img

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值