Spring中@Controller和@RestController注释的区别
Spring 注释 是提供有关程序的数据的元数据的一种形式。注释用于提供关于程序的补充信息。它对注释代码的操作没有直接影响。它不会改变已编译程序的操作。
@Controller注释: Spring @Controller注释也是@Component注释的专门化。@Controller注释表示一个特定的类充当 controller . Spring Controller注释通常与基于的注释处理程序方法结合使用 @RequestMapping注释。它只能应用于类。它用于将一个类标记为web请求处理程序。它主要用于Spring MVC应用程序。这个注释充当被注释类的原型,指出它的角色。dispatcher会扫描这些带注释的类,寻找映射的方法并进行检测 @RequestMapping 注释。
@RestController注释:在@RestController注释的帮助下,RestController用于创建restful web服务。这个注释在类级别使用,并允许类处理客户机发出的请求。让我们通过一个例子来理解@RestController注释。RestController允许处理所有REST api,如GET、POST、Delete和PUT请求。
现在让我们来找出两者之间的一个重大区别,如下所示。这里@Controller用于将类标记为Spring MVC控制器,而@RestController是一个方便的注释,它只添加了@Controller和@ResponseBody注释,下面的代码片段如下:
@Controller
@ResponseBody
class Controller
{
------
------
------
}
等价于
@RestController
class RestController
{
------
------
------
}
让我们最后通过表格形式总结它们之间的区别,表格形式如下:
@Controller | @RestController |
---|---|
@Controller用于将类标记为Spring MVC控制器。 | @RestController注释是RESTful Web服务中使用的一个特殊控制器,它是@Controller和@ResponseBody注释的组合。 |
它是@Component注释的一个特殊版本。 | 它是@Controller注释的专门版本。 |
在@Controller中,我们可以返回Spring Web MVC中的一个视图。 | 在@RestController中,我们不能返回视图。 |
@Controller注释表示类是一个类似于web控制器的“控制器”。 | @RestController注释指出类是一个控制器,其中@RequestMapping方法默认采用@ResponseBody语义。 |
在@Controller中,我们需要在每个处理程序方法上使用@ResponseBody。 | 在@RestController中,我们不需要在每个处理程序方法上使用@ResponseBody。 |
它被添加到Spring 2.5版本中。 | 它被添加到Spring 4.0版本中。 |