在SpringMVC中,经常会使用注解 的方式来定义一个控制器。
最常用的有控制器注解@Controller
,可以在控制器类中写各种业务方法,然后返回数据,一般数据的返回分成两大种
页面
返回静态页面
ModelAndView
返回页面和相应数据
json字符串
那么我们通常会使用@Controller
和@ResponseBody
来修饰某个具体的方法,当然@ResponseBody
还可以修饰类。如果某个类设计初衷就是返回json字符串,那么该类就可以使用@Controller + @ResponseBody
,还可以使@RestCotroller
简化书写
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller //控制器注解
@ResponseBody //返回数据会被解析成json字符串
public @interface RestController {
@AliasFor(
annotation = Controller.class
)
String value() default "";
}
从上面的源码中可以清晰的看到@RestController = @Controller + @ResponseBody
如何抉择
使用@Controller
修饰类,可以根据需要返回各种我们所需的数据(json,ModelAndView,静态页面),而使用RestController
修饰类,最后返回结果都会被解析成json字符串,适合所有的方法返回值都是json数据