zoukankan      html  css  js  c++  java
  • @Controller和@RestController的区别

    今天使用springboot试了一下跳转视图,死活显示不了页面的数据给我返回视图名字,查了一下结果是加上@RestController

    @RestController

      如果使用@RestController:所有方法都会返回数据,不会跳转页面
    
      网上查找的原因: 如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,或者html,
      配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。
    

    查看RestController注解的代码

    (1)Target(ElementType.TYPE): 表示此注解可以修饰 类、接口、注解、枚举类型
    (2)Retention(RetentionPolicy.RUNTIME):表示此注解被编译器编译后存储到Class文件中,并且jvm会通过java反射机制获取此注解的信息。
    (3)Documented:表示在使用javadoc命令生成javaAPI时,此注解会显示出来。
    (4)还有两个注解:一个是Controller、一个是ResponseBody
      源码的解释:一个方便的注释,本身是被Controller和ResponseBody注释的。意思就是两者的结合。
    

    ResponseBody的源码定义中的解释:

        首先这个注解可以用于修饰注解,所以它可以修饰RestController。
        其次看一下英文注释:这个注解指明一个方法的返回值应该绑定到response body中。
        在4.0版本中,这个注解可以添加到类型级别的元素上,它向下遗传,所以就不用添加到方法级别的元素上。
        看到这里:大概也就明白了为什么不跳转,因为使用了这个注解,spring会把返回的信息放到response的body中,不会再去走视图解析器了
    

    @Controller

    使用@Controller会跳转页面
    如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。
    如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。
    

    查看Controller注解的代码

      如果使用了此注解,则表示类是一个Controller,会被java容器管理,
      其类中的每个方法都可以声明为一个Action。
      Controller注解的注释:指明一个类是一个“Controller”。这个注解是对Component注解的专门化,
     允许实现类通过类路径扫描被自动检测。它一般会和注解RequestMapping一起使用。
    

    Component注解:指明一个类是一个“component"。当使用基于注解的配置和类路径扫描时,这个些类会被自动检测。

    总结

     如果使用@RestController:所有方法都会返回数据,不会跳转页面
     如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,或者html,
     配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。
    
    
    使用@Controller:会跳转页面
    如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。
    如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。
  • 相关阅读:
    Commonjs,AMD,CMD和UMD的差异
    ajax中datatype的json和jsonp
    bufferd对象详解
    NodeJS中Buffer模块详解
    Vue 定义组件模板的七种方式(一般用单文件组件更好)
    vuejs 单文件组件.vue 文件
    git clone 带用户名密码
    去掉一组整型数组重复的值
    Vue中在组件销毁时清除定时器(setInterval)
    使用Nginx实现反向代理
  • 原文地址:https://www.cnblogs.com/rzkwz/p/12936806.html
Copyright © 2011-2022 走看看