RestController 和Controller的区别

在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数据

猜你喜欢

转载自blog.csdn.net/yamadeee/article/details/80313068