在Spring框架中,使用注解来定义控制器类是非常方便和常见的做法。而其中两个常用的注解是@RestController
和@Controller
。这两个注解都可以用来标记一个类是控制器类,但是它们在功能和用法上略有不同。
1. @RestController注解
@RestController
注解是Spring4.0版本引入的一个新注解,它结合了@Controller
和@ResponseBody
注解的功能。使用@RestController
注解的类会将方法的返回值直接以JSON或XML格式返回给客户端,而不是返回一个视图。
使用@RestController
注解时,不需要在每个方法上再添加@ResponseBody
注解。同时,@RestController
注解也可以使用在类级别上。
下面是一个使用@RestController
注解的例子:
@RestController
@RequestMapping("/api")
public class UserController {
@GetMapping("/users")
public List<User> getUsers() {
// 获取用户列表
List<User> users = userService.getUsers();
return users;
}
@PostMapping("/users")
public User addUser(@RequestBody User user) {
// 添加用户
User newUser = userService.addUser(user);
return newUser;
}
}
2. @Controller注解
@Controller
注解是Spring MVC框架的基本注解之一,它用于标记一个类是控制器类。在控制器类中,我们可以定义各种处理HTTP请求的方法,并通过@RequestMapping
注解来映射请求的URL路径。
与@RestController
注解不同的是,使用@Controller
注解的类通常会返回一个视图,而不是直接返回数据。它会在方法中通过ModelAndView
对象将数据和视图名称传递给Spring框架。
下面是一个使用@Controller
注解的例子:
@Controller
@RequestMapping("/web")
public class WebController {
@GetMapping("/home")
public ModelAndView home(ModelAndView modelAndView) {
// 设置数据
modelAndView.addObject("message", "Welcome to the website!");
// 设置视图名称
modelAndView.setViewName("home");
return modelAndView;
}
}
3. 区别和选择
根据上述的介绍,我们可以总结出@RestController
和@Controller
的区别如下:
@RestController
注解相当于@Controller
和@ResponseBody
的组合,适用于返回JSON或XML格式的数据。@Controller
注解适用于返回视图,通过ModelAndView
对象传递数据和视图名称。
选择使用哪个注解,取决于我们想要返回的数据类型。如果我们希望返回的是数据而不是视图,使用@RestController
注解更合适。如果我们希望返回一个视图,并使用ModelAndView
对象传递数据和视图名称,那么使用@Controller
注解是个不错的选择。
无论选择哪个注解,都需要在Spring配置文件中添加<mvc:annotation-driven />
来开启注解驱动的支持。
总之,@RestController
和@Controller
是Spring框架中常用的注解之一,用来标记控制器类。它们在返回数据类型和用法上略有不同,根据需求选择合适的注解可以让代码更加清晰和易于维护。
本文来自极简博客,作者:星辰漫步,转载请注明原文链接:Spring 注解之@RestController与@Controller的区别