Contents

Spring @controller和@RestController注解

1.概述

在这个简短的教程中,我们将讨论Spring MVC 中*@Controller@RestController*注解之间的区别。

我们可以将第一个注解用于传统的 Spring 控制器,它已经成为框架的一部分很长时间了。

Spring 4.0 引入了*@RestController注解,以简化 RESTful Web 服务的创建。*这是一个方便的注解,结合了@Controller和*@ResponseBody* *,它消除了使用@ResponseBody*注解对控制器类的每个请求处理方法进行注解的需要。

2. Spring MVC @Controller

我们可以使用*@Controller*注解来注解经典控制器。这只是 @Component类的一个特化,它允许我们通过类路径扫描自动检测实现类。

我们通常将*@Controller@RequestMapping*注解结合使用,用于请求处理方法。

让我们看一个 Spring MVC 控制器的快速示例:

@Controller
@RequestMapping("books")
public class SimpleBookController {
    @GetMapping("/{id}", produces = "application/json")
    public @ResponseBody Book getBook(@PathVariable int id) {
        return findBookById(id);
    }
    private Book findBookById(int id) {
        // ...
    }
}

我们用*@ResponseBody注释了请求处理方法。此注释支持将返回对象自动序列化到HttpResponse*中。

3. Spring MVC @RestController

@RestController是控制器的专用版本。它包括*@Controller@ResponseBody*注释,因此简化了控制器的实现:

@RestController
@RequestMapping("books-rest")
public class SimpleBookRestController {
    
    @GetMapping("/{id}", produces = "application/json")
    public Book getBook(@PathVariable int id) {
        return findBookById(id);
    }
    private Book findBookById(int id) {
        // ...
    }
}

控制器使用@RestController注解进行注解;因此,不需要@ResponseBody。** 控制器类的每个请求处理方法都会自动将返回对象序列化为HttpResponse