• @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注解。
  • 相关阅读:
    How to make sexy button with CSS
    Android程序的完美退出(兼容所有SDK )
    Android颜色大全
    Android: NDK编程入门笔记
    Notification
    创建数据库
    android 自定义标题栏(在标题栏中增加按钮和文本居中)
    havlenapetrFFMpeg OnVideoSizeChangedListener接口的实现
    Android Dev GuideTasks and Back Stack(下)
    Android线程实现AsyncTask
  • 原文地址:https://www.cnblogs.com/rzkwz/p/12936806.html
Copyright © 2020-2023  润新知