@RestController 和 @Controller 有什么区别?
时间: 2023-11-04 11:56:31 浏览: 58
@RestController 和 @Controller 是 Spring Framework 中的注解,用于定义控制器类。它们之间的区别如下:
1. @Controller:用于定义 MVC 模式中的控制器类,常用于返回视图页面。在使用 @Controller 注解时,方法必须使用 @RequestMapping 或其衍生注解来映射请求路径。
2. @RestController:是一个复合注解,包含了 @Controller 和 @ResponseBody 注解。@ResponseBody 注解用于将方法的返回值直接作为 HTTP Response 的内容返回,而不经过视图解析器。它适用于编写 RESTful API,返回的是数据而不是视图。
因此,主要的区别在于 @RestController 注解会自动将方法的返回值序列化为 JSON/XML 格式,并将其作为 HTTP Response 返回,而 @Controller 注解需要使用视图解析器来解析返回值。
相关问题
@RestController和@Controller有什么区别?
@RestController相当于@Controller和@ResponseBody合在一起的作用。使用@RestController注解的Controller层返回的是return里面的内容,无法返回到指定的页面。如果需要返回到指定的页面,则需要使用@Controller配合视图解析器InternalResourceViewResolver。如果需要返回JSON、XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。
boot工程中@RestController和@Controller有什么区别
@RestController和@Controller是Spring Boot中常用的注解,用于标识一个类是控制器(Controller)。它们之间的区别如下:
1. @RestController注解是@ResponseBody和@Controller的组合注解。它表示该类中的所有方法都会返回JSON或XML格式的数据,而不是视图页面。这意味着@RestController注解适用于构建RESTful API。
2. @Controller注解表示该类是一个控制器,用于处理用户的请求并返回视图页面。它通常与模板引擎(如Thymeleaf、Freemarker等)一起使用,用于生成动态的HTML页面。
因此,如果你的目标是构建RESTful API,你应该使用@RestController注解。如果你的目标是生成视图页面,你应该使用@Controller注解。
下面是一个示例代码,演示了如何在Spring Boot工程中使用@RestController和@Controller注解:
```java
// 使用@RestController注解构建RESTful API
@RestController
public class ApiController {
@GetMapping("/api/hello")
public String sayHello() {
return "Hello, World!";
}
}
// 使用@Controller注解生成视图页面
@Controller
public class ViewController {
@GetMapping("/view/hello")
public String sayHello(Model model) {
model.addAttribute("message", "Hello, World!");
return "hello";
}
}
```