当前位置: 首页 > java>阅读正文

springboot之controller常用注解

2021.9.27 朱丰华 1996 次 留下评论 1869字

控制器,也叫controller,相当于一个servlet,

@Controller

标注于一个类,使用了此注解的类中的所有方法,默认返回视图处理器

注意,它仅仅是标注这是一个springmvc 的 controller类

返回时,应该是一个字符串,例如”abc/test.jsp”,那么它是template下的abc/test.jsp

@ResponseBody

此注解,需要用在增加了@Controller的类上,它可以用于“类”,或“方法”上,用在方法上时会将该方法的数据直接return给浏览器,而不经过视图处理器

用在类上时,那么该类下的所有方法会有效,直接返回给浏览器

如果是字符串,原格式返回,如果是其他比如返回一个类,那么会自动返回Json格式

@RestController

此注解,相当于 @Controller和@ResponseBody 的组合注解

使用了此注解的类,所有方法均会直接返回给浏览器,而不经过视图处理器

如果此类中一部分需要经过视图,一部分不经过视图,那么不应该使用此类,而是使用@Controller,并在需要直接返回的方法上使用@ResponseBody

@RequestMapping

此注解,有多个参数

此注解,可以用于类上,或用在方法上

语法格式

@RequestMapping("value")

使用在类上时,通常只使用一个参数,即value参数,相当于servlet注解的value,表示给类添加一个注册地址,那么该类中的所有参数都会加上此前缀路径

用在方法上时,使用的参数往往比较多,不过通常也只使用2个

语法格式

@RequestMapping(value = "value",method=RequestMethod.GET)

使用value参数指定注册路径,再使用method指定请求方式,method的值是枚举类RequestMethod中的值,和value一样可以指定多个

  • consumes用于限制Content-Type
  • produces用于限制Accept

value参数,*表示任意字符,支持url模板,支持正则表达式

简化的@RequestMapping

使用@RequestMapping时,通常会指定请求方法,缺省时是GET

但每次设置method比较麻烦,于是有了组合注解

@GetMapping => 相当于@RequestMapping + method=get;
@PostMapping => 相当于@RequestMapping + method=post;

在springboot中,推荐使用restful风格,故也有PutMapping,DeleteMapping等

@PathVariable

用于获取URL中的参数:一般{ }中的变量名与方法中的形参名一致

此注解使用时,必须加在方法形式参数前,且名称必须一致,如果不一致会导致错误

@GetMapping("/hello/{id}")
public String hello(@PathVariable("id") String id) {
    return id;
}

@RequestParam

  取query string当中的参数,query string参数就是请求url中的查询参数

或用来处理Content-Type为application/x-www-form-urlencoded

@RequestParam(value=”参数名”,required=”true/false”,defaultValue=”默认值”)

此注解,本意上,是为了替代HttpRequestServlet对象来获取参数,但用起来却仅仅是取到了get参数

如果你无法完全熟练使用springboot获取参数,你仍然可以直接在参数中传递HttpServletRequest对象,就像使用servlet一样

@RequestHeader

此注解,作用在形式参数前,用于绑定http协议的header

@GetMapping("/getHeader")
public String getRequestHeader(@RequestHeader("User-Agent") String agent) {
    System.out.println(agent);
    return agent;
}

@RequestBody

@RequestBody Object object 接收请求体中的数据,由Spring MVC自动封装成java对象。

它用于接收http协议中的body部分数据

需要注意的是如果前端传的参数一个json数组,后端控制器一定List<>接收,不可用对象数组接收。

本篇完,还有疑问?留下评论吧

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注