Spring Boot @Controller和@RestController用法详解
Spring Boot 提供了 @Controller 和 @RestController 两种注解来标识此类负责接收和处理 HTTP 请求。如果请求的是页面和数据,使用 @Controller 注解即可;如果只是请求数据,则可以使用 @RestController 注解。
在 @Controller 类中,如果只返回数据到前台页面,需要使用 @ResponseBody 注解,否则会报错。
示例代码如下:
近几年前端框架越来越强大,前后端分离的 RESTful 架构成为主流。Spring Boot 对 RESTful 也做了非常完善的支持,使用也特别简单,使用 @RestController 注解自动返回 JSON 格式的数据,同时使用 @GetMapping、PostMapping 等注解实现映射 RESTful 接口。
虽然二者的用法基本类似,但还是有一些区别,具体如下:
1) @Controller 标识当前类是 Spring MVC Controller 处理器,而 @RestController 则只负责数据返回。
2) 如果使用 @RestController 注解,则 Controller 中的方法无法返回 Web 页面,配置的视图解析器 InternalResourceViewResolver 不起作用,返回的内容就是 Return 中的数据。
3) 如果需要返回指定页面,则使用 @Controller 注解,并配合视图解析器返回页面和数据。如果需要返回 JSON、XML 或自定义内容到页面,则需要在对应的方法上加上 @ResponseBody 注解。
4) 使用 @Controller 注解时,在对应的方法上,视图解析器可以解析返回的 JSP、HTML 页面,并且跳转到相应页面。若返回 JSON 等内容到页面,则需要添加 @ResponseBody 注解。
5) @RestController 注解相当于 @Controller 和 @ResponseBody 两个注解的结合,能直接将返回的数据转换成 JSON 数据格式,无须在方法前添加 @ResponseBody 注解,但是使用 @RestController 注解时不能返回 JSP、HTML 页面,因为视图解析器无法解析 JSP、HTML 页面。
总之,在 Web 系统中使用 @Controller 较多,而在 Web API 中基本使用 @RestController 注解。
声明:《Java系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
@Controller的用法
Spring Boot 提供的 @Controller 注解主要用于页面和数据的返回。下面创建 HelloController 响应前台页面请求,示例代码如下:@Controller @RequestMapping("user") public class UserController { @RequestMapping("/index") public String index() { map.addAttribute("name", "thymeleaf-index"); return "thymeleaf/index"; } }上面的示例用于请求 /user/index 地址,返回具体的 index 页面和 name=thymeleaf-index 的数据。在前端页面中可以通过 ${name} 参数获取后台返回的数据并显示到页面中。
在 @Controller 类中,如果只返回数据到前台页面,需要使用 @ResponseBody 注解,否则会报错。
示例代码如下:
@Controller public class HelloController { @RequestMapping("/hello") @ResponseBody public String hello(){ return "hello,world"; } }
@RestController的用法
Spring Boot 提供的 @RestController 注解用于实现数据请求的处理。默认情况下,@RestController 注解会将返回的对象数据转换为 JSON 格式。示例代码如下:@RestController @RequestMapping("/user") public class UserController { @RequestMapping("/getUser") public User getUser(){ User u = new User(); u.setName("weiz222"); u.setAge(20); u.setPassword("weiz222"); return u; } }在上面的示例中,定义 /user/getUser 接口返回 JSON 格式的 User 数据。同时,@RequestMapping 注解可以通过 method 参数指定请求的方式。如果请求方式不对,则会报错。
近几年前端框架越来越强大,前后端分离的 RESTful 架构成为主流。Spring Boot 对 RESTful 也做了非常完善的支持,使用也特别简单,使用 @RestController 注解自动返回 JSON 格式的数据,同时使用 @GetMapping、PostMapping 等注解实现映射 RESTful 接口。
@RestController和@Controller的区别
@Controller 和 @RestController 注解都是标识该类是否可以处理 HTTP 请求,可以说 @RestController 是 @Controller 和 @ResponseBody 的结合体,是这两个注解合并使用的效果。虽然二者的用法基本类似,但还是有一些区别,具体如下:
1) @Controller 标识当前类是 Spring MVC Controller 处理器,而 @RestController 则只负责数据返回。
2) 如果使用 @RestController 注解,则 Controller 中的方法无法返回 Web 页面,配置的视图解析器 InternalResourceViewResolver 不起作用,返回的内容就是 Return 中的数据。
3) 如果需要返回指定页面,则使用 @Controller 注解,并配合视图解析器返回页面和数据。如果需要返回 JSON、XML 或自定义内容到页面,则需要在对应的方法上加上 @ResponseBody 注解。
4) 使用 @Controller 注解时,在对应的方法上,视图解析器可以解析返回的 JSP、HTML 页面,并且跳转到相应页面。若返回 JSON 等内容到页面,则需要添加 @ResponseBody 注解。
5) @RestController 注解相当于 @Controller 和 @ResponseBody 两个注解的结合,能直接将返回的数据转换成 JSON 数据格式,无须在方法前添加 @ResponseBody 注解,但是使用 @RestController 注解时不能返回 JSP、HTML 页面,因为视图解析器无法解析 JSP、HTML 页面。
总之,在 Web 系统中使用 @Controller 较多,而在 Web API 中基本使用 @RestController 注解。
声明:《Java系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。