小白面试题:@Controller和@RestController的区别

Posted 长安紫薯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小白面试题:@Controller和@RestController的区别相关的知识,希望对你有一定的参考价值。

这两个注解都是用于SpringMVC框架,
早期使用JSP做页面展示时,习惯使用Controller注解,它返回的是SpringMVC框架提供的ModelAndView对象(简称Model对象)
而当今主流习惯的时控制层返回JSON,前台页面通过ajax提交Controller请求,然后获得JSON字符串响应,然后解析JSON,从中获取数据后在页面上展现。
显然这种方式优于早期只为JSP服务的方式,不仅兼容就的JSP方式,支持新的ajax方式,甚至能异构系统,前台是nodejs下的vue+elementui等。

说了半天怎么跟题目好像无关呢?别着急说清了背景,区别就出来了。
@Controller 适合早期JSP方式,它直接返回ModelAndView对象。
@RestController 适合现今大前端方式,如VUE,它返回JSON,vue对json解析,渲染到页面上。

*** @since 2.5**

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {

*** @since 4.0**

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {

为了兼容以前方式,RestController其实就是Controller,只是在Controller返回对象前,它干了件事情,通过注解标识@ResponseBody把返回的对象Object,转换成了JSON字符串。

这里注意@Controller返回也是java对象,但它本质是SpringMVC框架的ModelAndView对象;
而@RestController返回则是业务对象,或者统一的返回值对象 SysResult。

以上是关于小白面试题:@Controller和@RestController的区别的主要内容,如果未能解决你的问题,请参考以下文章

小白面试题:@Component和@Bean的区别

新手小白必知的5道Web前端经典面试题

前端小小白—每日5道面试题打卡(十五)

小白面试题:HttpStatus响应值

老鼠和毒药(面试题)

python框架面试题联系