一言以蔽之,@Controller需要View层来输出他的数据,需要在resource层加入jsp or ftl文件。或者如果要输出JSON或XML类型文件的话,需要在对应的方法上加上@ResponseBody注解。而@RestController则是@Controller和@ResponseBody的组合,加在class上面。而使用@Controller则要在每个method上都加一遍@ResponseBody。比起@RestController繁琐很多。
本质上,@Controller按照Spring 的MVC架构,Controller是连接Model层和View层的,Controller将数据转发到View层,由View层负责展示数据。如果我们想要通过Controller层转发到View层的jsp 或者 ftl文件来展示数据的话,使用@Controller。而Rest风格的应用,则是习惯将Controller层作为最终的展示界面,所以需要直接返回JSON 或者 XML的数据。所以此时适合使用@RestController这个注解。