spring @Controller和@RestController注释之间的区别。

@Controller注释可以同时用于Web MVC和REST应用程序吗? 如果是,我们如何区分它是Web MVC还是REST应用程序?


当前回答

@Controller在使用jsp的遗留系统中使用。它可以返回视图。 @RestController用于标记该控制器正在提供JSON响应类型的REST服务。所以它将@Controller和@ResponseBody注释包装在一起。

其他回答

正如您在Spring文档(Spring RestController documentation)中看到的,RestController注释与Controller注释相同,但假设@ResponseBody默认是活动的,因此所有Java对象都被序列化为响应体中的JSON表示。

@Controller返回View。@RestController返回ResponseBody。

@Controller用于将类标记为Spring MVC Controller。 @RestController是一个方便的注释,它只添加了@Controller和@ResponseBody注释(参见:Javadoc)。

所以下面两个控制器定义应该做同样的事情

@Controller
@ResponseBody
public class MyController { }

@RestController
public class MyRestController { }

@Controller在使用jsp的遗留系统中使用。它可以返回视图。 @RestController用于标记该控制器正在提供JSON响应类型的REST服务。所以它将@Controller和@ResponseBody注释包装在一起。

@Controller注解指出类是一个像web控制器一样的“控制器”,而@RestController注解指出类是一个控制器,其中@RequestMapping方法默认假设@ResponseBody语义,即服务REST API