Spring中@Controller和@RestController注解

@Controller注解和@RestController注解有什么区别?

The Spring @Controller and @RestController Annotations

注:本篇文章是对此篇的翻译,有兴趣的同学可以点击 查看原文

太长不看版:@RestController = @Controller + @ResponseBody

1. 概述

在这个快速指南中,我们将会讨论Spring MVC中 @Controller 和 @RestController这两个注解的区别。

@Controller用于传统的Spring 控制器中,并且在很长一段时间内都是框架的一部分。

@RestController注解是从Spring 4.0引入的,用于简化RESTful 接口的创建。

它是个非常方便的注解,是@Controller 和 @ResponseBody的组合。

这样就不需要在Controller中的每个方法上都加上一遍@ResponseBody注解。

2. Spring MVC @Controller

通常的控制器可以使用@Controller注解,这是@Component 类的一个特别的实现,允许通过类路径扫描自动检测到实现类。

举个栗子:

@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的特别版,它包括@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) {
        // ...
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容