菜鸟入行02 SpringMVC中控制层(Controller)的注释

1. 运用于控制层(controller)的一些注释

首先给出整体的列表(有些我会说,有些我不会)

应用场景 注解 注解说明
处理请求 @Controller 处理 Http 请求
处理请求 @RestController @Controller 的衍生注解
路由请求 @RequestMapping 路由请求 可以设置各种操作方法
路由请求 @GetMapping GET 方法的路由
路由请求 @PostMapping POST 方法的路由
路由请求 @PutMapping PUT 方法的路由
路由请求 @DeleteMapping DELETE 方法的路由
请求参数 @PathVariable 处理请求 url 路径中的参数 /user/{id}
请求参数 @RequestParam 处理问号后面的参数
请求参数 @RequestBody 请求参数以json格式提交
返回参数 @ResponseBody 返回 json 格式

 来源:https://www.cnblogs.com/fishpro/p/spring-boot-study-restcontroller.html

 2. @Controller 与 @RestController 

首先讲一个所有人都知道的结论:@RestController = @Controller + @ResponseBody。

在注释的代码中@RestController是被@Controller 和 @ResponseBody 同时注释的。因此不能简单的理解@RestController 是 @Controller 或者 @ResponseBody的子类。而是同时拥有而这两个功能的结合型的注释。

下面我们就先分开讲然后合起来讲。

2.1 @Controller 

spring mvc 开发中最常用的注释之一。spring在运行后会扫描所有包、子包和里面的子类,并读取各种注释。而@Controller的作用就是让spring把该类注入IOC容器中,作为Spring的Bean来管理。同时配合其他注释(例如@RequestMapping),可以让接口定义更简单(例如,多个具有相似性的接口可以放在同一个类中,映射路径的规定也会规范)。

此外,在@controller注解中,如果返回的是字符串,或者是字符串匹配的模板名称,即直接渲染视图,跳转到jsp、ftl、html等模版页面。

*在下属方法名不加其他注释的情况下只能返回String即页面(待进一步查询)

**方法返回不是string时会不会报错待查证

@Controller
public class ExampleController {

    @RequestMapping("/example")
    public String exampleMethod(@Param("example") String param){
 
        return "success"; //此时返回的时页面名为“success”的页面。
    }
 
}

2.2 @ResponseBody

@ResponseBody的主要含义是让方法返回数据而不像@Controller那样直接返回界面。

被@ResponseBody注释的方法即使返回类型是String,也只是返回String类型的数据,而不是页面。默认情况下,使用@ResponseBody返回的数据只能是String类型,其它类型返回时会出现异常(似乎是因为前端接受的数据类型是JSON,通常的后端返回值类型在不做处理的情况下只有String能被前端接受)。这种时候可以用类型转换器去解决Java对象和JSON对象不匹配的问题。这里不再赘述。

2.3 @RestController

至此就明白了该注释的作用了。在实现@Controller的注入功能前提下,让该类里的所有方法返回的是JSON数据。这样就不需要一个个方法上去加@ResponseBody。

上一篇:「[JSOI2011]分特产」题解


下一篇:BBB板 --重装操作系统