• @RestController注解初步理解


    一、在Spring中@RestController的作用等同于@Controller + @ResponseBody。

      所以想要理解@RestController注解就要先了解@Controller和@ResponseBody注解。

    二、@Controller注解

      在一个类上添加@Controller注解,表明了这个类是一个控制器类。但想要让这个类成为一个处理请求的处理器光有@Controller注解是不够的,他还需要进一步修炼才能成为一个处理器。

      1.在spring容器中创建该类的实例。创建实例的方式有两种:

      <bean class="test.controller.MyController" />
    

      上述这种方式是在spring容器中注入单个bean,当项目比较大,控制器类比较多时,用这种方式向Spring容器中注入bean非常的让人苦恼,索性有第二种方式。

      <context:component-scan base-scan="test.controller" />
    

      这种方式会扫描指定包中的所有类,并生成相应的bean注入到spring容器中。使用这种方式当然能够极大提高我们的开发效率,但是有时候我们不想某一类型的类注入到spring容器中。

      这个时候第二种方式也可以解决。

      <context:component-scan base-package="test" >
          <context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
      </context:component-scan>
    

      上述代码表示扫描test包中除有@Service注解之外的类。

      2.将@Controller注解的类注入Spring容器中,只是该类成为处理器的第一步,想要修炼大成,还需要在该类中添加注解@RequestMapping。

       @RequestMapping注解是用来映射请求的,即指明处理器可以处理哪些URL请求,该注解既可以用在类上,也可以用在方法上。

       当使用@RequestMapping标记控制器类时,方法的请求地址是相对类的请求地址而言的;当没有使用@RequestMapping标记类时,方法的请求地址是绝对路径。

       @RequestMapping的地址可以是uri变量,并且通过@PathVariable注解获取作为方法的参数。也可以是通配符来筛选请求地址。具体的使用方法不是本次的重点,有兴趣的可以看

        https://www.cnblogs.com/xiepeixing/p/4243288.html

     1   @Controller
     2   @RequestMapping("/user")
     3   public class UserController{
     4         
     5       @RequestMapping("/users")
     6       public String users() {
     7           return "users";
     8       }
     9     
    10
    11   }

      此时请求users方法的url路径就是:.../user/users。

      可以看到上面users方法的返回值是字符串类型的,这个就是处理器在处理完任务后将要跳转的页面。如果想要方法直接返回结果,而不是跳转页面,这就要用到@ResponseBody注解了。

    三、@ResponseBody注解

      @ResponseBody表示方法的返回值直接以指定的格式写入Http response body中,而不是解析为跳转路径。

      格式的转换是通过HttpMessageConverter中的方法实现的,因为它是一个接口,因此由其实现类完成转换。

    如果要求方法返回的是json格式数据,而不是跳转页面,可以直接在类上标注@RestController,而不用在每个方法中标注@ResponseBody,简化了开发过程。

    理解@RestController过程中参考了下面这些博客,非常感谢

    https://www.cnblogs.com/daimajun/p/7152970.html

    https://blog.csdn.net/l358366885/article/details/79485497

    https://blog.csdn.net/sunroyfcb/article/details/81048675

  • 相关阅读:
    第四章 生命周期函数-- 34 生命周期函数-组件运行和销毁阶段的钩子函数
    第三章 指令-- 31 指令-定义私有指令,32 指令-指令函数的简写形式
    第三章 指令-- 30 指令-使用钩子函数的第二个binding参数拿到传递的值
    第三章 指令-- 29 指令-自定义全局指令让文本框获取焦点
    bindActionCreators作用
    Object.prototype.toString.call()
    C语言基础 (4) 原码反码补码与数据类型
    React中的setState(obj)
    清除行内元素中间的空白
    分清encodeURIComponent encodeURI 和 escape
  • 原文地址:https://www.cnblogs.com/yaqee/p/11256047.html
Copyright © 2020-2023  润新知