• SpringMVC常用注解介绍及参数传递说明


    目录

    前言

    一. SpringMVC常用注解

    1.1 @RequestParam

     1.2 @RequestBody

    1.3 @PathVariable

    1.4 @RequestHeader

    二. SpringMVC的参数传递

    2.1 基础类型传参,可以接收String以及八大数据类型

    2.2  复杂类型传参

    2.3  @RequestParam注解传参

    2.4  @PathVariable注解传参

    2.5 @RequestBody注解传参

     2.6 @RequestHeader注解传参

     三. 页面跳转


    前言

    上一篇文章介绍了SpringMVC是什么以及它的工作流程和核心组件,介绍入门示例时,提到了@RequestMapping注解,那么这篇文章就来介绍SpringMVC中更多的常用的注解,以及它的参数传递。

    一. SpringMVC常用注解

    1.1 @RequestParam

    @RequestParam主要用于将请求参数区域的数据映射到控制层方法的参数上,可以指定参数名、是否必需、默认值等属性。

    参数说明
    value请求中传入参数的名称,如果不设置后台接口的value值,则会默认为该变量名。
    required该参数是否为必传项。默认是true,表示请求中一定要传入对应的参数,否则会报404错误,如果设置为false时,当请求中没有此参数,将会默认为null,而对于基本数据类型的变量,则必须有值,这时会抛出空指针异常。如果允许空值,则接口中变量需要使用包装类来声明。
    defaultValue参数的默认值,如果请求中没有同名的参数时,该变量默认为此值。注意默认值可以使用SpEL表达式,如"#{systemProperties[‘java.vm.version’]}"

     1.2 @RequestBody

    @RequestBody主要用来接收前端传递给后端的json字符串中的数据 (即请求体中的数据)。

    GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。

    1.3 @PathVariable

    用于将URL中的占位符参数绑定到方法的参数上。

    1.4 @RequestHeader

    使用 @RequestHeader 注解可以获取指定的请求头信息。

    二. SpringMVC的参数传递

    日志所需依赖

    1. 2.9.1
    2. 3.2.0
    3. 1.7.13
    4. org.slf4j
    5. slf4j-api
    6. ${slf4j.version}
    7. org.slf4j
    8. jcl-over-slf4j
    9. ${slf4j.version}
    10. runtime
    11. org.apache.logging.log4j
    12. log4j-api
    13. ${log4j2.version}
    14. org.apache.logging.log4j
    15. log4j-core
    16. ${log4j2.version}
    17. org.apache.logging.log4j
    18. log4j-slf4j-impl
    19. ${log4j2.version}
    20. org.apache.logging.log4j
    21. log4j-web
    22. ${log4j2.version}
    23. runtime
    24. com.lmax
    25. disruptor
    26. ${log4j2.disruptor.version}

    2.1 基础类型传参,可以接收String以及八大数据类型

    1. @RequestMapping("/demo01")
    2. public String index(String bname,Integer bid){
    3. log.info("基础传参:bname:{},bid:{}",bname,bid);
    4. return "index";
    5. }

    2.2  复杂类型传参

    1. @RequestMapping("/demo02")
    2. public String demo02(Book book, HttpServletRequest request){
    3. // servlet原生参数获取方式
    4. log.info("复杂类型传参:bname:{},bid:{}",
    5. request.getParameter("bname"),
    6. request.getParameter("bid"));
    7. // 复杂类型传参
    8. log.info("复杂类型传参:book:{}",
    9. book.toString());
    10. return "index";
    11. }

    2.3  @RequestParam注解传参

    1. @RequestMapping("/demo03")
    2. public String demo03(@RequestParam String bname,
    3. @RequestParam(required = false) Integer bid){
    4. log.info("@RequestParam传参:bname:{},bid:{}",bname,bid);
    5. return "index";
    6. }

     注意:这里bname的注解没有设置required值,则默认为true,是必填项,否则会报404错误。

    2.4  @PathVariable注解传参

    1. @RequestMapping("/demo04/{bid}")
    2. public String demo04(@PathVariable Integer bid){
    3. log.info("@PathVariable传参:bid:{}",bid);
    4. return "index";
    5. }

    2.5 @RequestBody注解传参

    使用@RequestBody注解传参时,需要先导入pom依赖

    1. 2.9.3
    2. com.fasterxml.jackson.core
    3. jackson-databind
    4. ${jackson.version}
    5. com.fasterxml.jackson.core
    6. jackson-core
    7. ${jackson.version}
    8. com.fasterxml.jackson.core
    9. jackson-annotations
    10. ${jackson.version}
    1. @RequestMapping("/demo05")
    2. public String demo05(@RequestBody Map map){
    3. log.info("@RequestBody传参:map:{}",map);
    4. return "index";
    5. }

    注意:要接收json数据,前提要导入Jackson依赖,没有导入Jackson依赖的话进不了这个方法 

     使用postman或者apipost/eolink等工具发送请求数据。

     2.6 @RequestHeader注解传参

    1. @RequestMapping("/demo06")
    2. public String demo06(@RequestHeader("jwt") String jwt){
    3. log.info("@RequestHeader传参:jwt:{}",jwt);
    4. return "index";
    5. }

    1. @RequestMapping("/demo07")
    2. public String demo07(Book book, @RequestBody Map map, @RequestHeader("jwt") String jwt){
    3. log.info("book:book:{}",book.toString());
    4. log.info("@RequestBody:map:{}",map);
    5. log.info("@RequestHeader传参:jwt:{}",jwt);
    6. return "index";
    7. }

     三. 页面跳转

    转发(forward:path)和重定向(redirect:path)这两种跳转方式将会绕开视图解析器的前缀后缀;还有就是如果是在同一controller中,则不用使用"/"从根目录开始,而如果是在不同的controller则一定要从根目录开始。

    path为请求处理方法名,而非逻辑视图名。

    • 转发(地址栏不变)

    1. @RequestMapping("/helloPage1")
    2.    public String toHelloPage1(){
    3.        log.info("helloPage1");
    4.        return "forward:demo02";
    5.   }

    它相当于“request.getRequestDispatcher("url").forward(request,response)”。使用转发,既可以转发到jsp, 也可以转发到其他的控制器方法。

    • 重定向(地址栏改变)

    1. @RequestMapping("/helloPage2")
    2.    public String toHelloPage2(){
    3.        log.info("helloPage2");
    4.        return "redirect:demo02";
    5.   }

    它相当于“response.sendRedirect(url)”。需要注意的是,如果重定向到jsp页面,则jsp页面不能写在WEB-INF目录中,否则无法找到。

  • 相关阅读:
    层次聚类算法及通过python的scipy进行计算
    浅谈mysql扩展之读写分离、垂直分区、水平分区
    Disruptor测试结果运算1亿次,耗时5503ms,吞吐量18171000/s,于是我扒开了Disruptor高性能的外衣
    【STM32】江科大STM32学习笔记汇总(50)
    OpenCV入门9:图像增强和图像滤波
    学会使用MySQL的Explain执行计划,SQL性能调优从此不再困难
    数据挖掘与分析应用1:Excel表数据分析,sum,sumif,sumifs,vlookup,match,index,几个配合使用
    皕杰报表在tomcat的server.xml中配置了什么?
    Spring详解
    数据结构篇——KMP算法
  • 原文地址:https://blog.csdn.net/lijie1025/article/details/132690837