Spring 注解之@RestController与@Controller的区别

星辰漫步 2024-02-19 ⋅ 25 阅读

在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框架中常用的注解之一,用来标记控制器类。它们在返回数据类型和用法上略有不同,根据需求选择合适的注解可以让代码更加清晰和易于维护。


全部评论: 0

    我有话说: