小白面试题:@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的区别的主要内容,如果未能解决你的问题,请参考以下文章