3.5 Spring MVC参数传递

简介: Spring MVC的Controller接收请求参数的方式有多种,本节主要介绍Spring MVC下的HttpServletRequest、基本数据类型、Java Bean、数组、List、Map、JSON参数传递方式,同时解决POST请求中文乱码问题。

 Spring MVC的Controller接收请求参数的方式有多种,本节主要介绍Spring MVC下的HttpServletRequest、基本数据类型、Java Bean、数组、List、Map、JSON参数传递方式,同时解决POST请求中文乱码问题。

1. HttpServletRequest参数传递

@Controller@RequestMapping("/param")
publicclassParamController {
/***  通过HttpServletRequest接收参数*/@RequestMapping("/servlet")
publicvoidservlet(HttpServletRequestrequest, HttpServletResponseresponse) throwsIOException {
Stringname=request.getParameter("name");
System.out.println("name="+name);
PrintWriterwriter=response.getWriter();
writer.print("hello "+name);
writer.flush();
writer.close();
    }
}

image.gif

2. 基本数据类型参数传递

基本数据类型以及他们的包装类。

@Controller@RequestMapping("/param")
publicclassParamController {
/*** 使用基本数据类型和String类型*/@RequestMapping("/simple")
@ResponseBodypublicStringsimple(intid, Stringname) throwsIOException {
Stringstr="id = "+id+",name = "+name;
System.out.println(str);
returnstr;
    }
}


3. Java Bean参数传递

@Controller@RequestMapping("/param")
publicclassParamController {
/*** JavaBean传递参数*/@RequestMapping(value="/bean",
produces="text/plain;charset=UTF-8",
method=RequestMethod.POST)
@ResponseBodypublicStringparamBean(Studentstudent){
System.out.println(student);
returnstudent.toString();
    }
}


4. 数组参数传递

@Controller@RequestMapping("/param")
publicclassParamController {
/*** 数组参数*/@RequestMapping(value="/array",method=RequestMethod.POST)
@ResponseBodypublicStringarray(String[] hobbies){
for(Stringhobby : hobbies){
System.out.println(hobby);
    }
return"success";
}
}


5. List参数传递

@Controller@RequestMapping("/param")
publicclassParamController {
/*** List参数*/@RequestMapping(value="/list",method=RequestMethod.POST)
@ResponseBodypublicStringlist(@RequestParamList<String>hobbyList){
hobbyList.forEach(hobby->System.out.println(hobby));
return"success";
}
}


6. Map参数传递

@Controller@RequestMapping("/param")
publicclassParamController {
/*** Map参数*/@RequestMapping(value="/map",method=RequestMethod.POST)
@ResponseBodypublicStringmap(@RequestParamMap<String,Object>map){
System.out.println(map);
return"success";
}
}


7. JSON参数传递

JSON格式采用键值对的方式来表示数据,由花括号 {} 包含对象,由方括号 [] 包含数组,可通过JSON在线解析工具进行校验/格式化,具体格式如下:

    • 对象

    对象是一个无序的键/值对集合,每个键后面需要添加一个冒号(:),键/值对之间使用逗号(,)分隔。

    {
        "id": "1",
        "name": "zhangsan",
        "age":20
    }


      • 数组

      数组可以包含多个元素,每个元素之间使用逗号(,)分隔,可以包含简单值、对象或者其他数组。

      [
          {
          "id": "1",
          "name": "zhangsan"
          },
          {
          "id": "2",
          "name": "zhangsan"
          }
      ]


      Spring MVC可以使用Jackson框架作为JSON的转换器。

      通过@RequestBody可以将前端的JSON参数转成Java Bean、Map、List等引用类型。

      通过@ResponseBody可以将后端的Java Bean、Map、List等引用类型转成JSON结果输出。

      使用Jackson时需要三个jar包jackson-databind.jar、jackson-core.jar、jackson-annotations.jar。如果Spring MVC创建的是Maven项目,仅需要依赖jackson-databind,因为它传递依赖了jackson-core和jackson-annotations。

      @Controller@RequestMapping("/json")
      publicclassJsonController {
      /*** json bean*/@RequestMapping(value="/bean",method=RequestMethod.POST)
      @ResponseBodypublicObjectbean(@RequestBodyStudentstudent){
      System.out.println(student);
      Map<String,Object>map=newHashMap<String,Object>();
      map.put("code",200);
      map.put("msg","success");
      map.put("data",student.toString());
      returnmap;
          }
      /*** json map*/@RequestMapping(value="/map",method=RequestMethod.POST)
      @ResponseBodypublicObjectmap(@RequestBodyMap<String,Object>jsonMap){
      System.out.println(jsonMap);
      Map<String,Object>map=newHashMap<String,Object>();
      map.put("code",200);
      map.put("msg","success");
      map.put("data",jsonMap);
      returnmap;
          }
      /*** json list*/@RequestMapping("/list")
      @ResponseBodypublicObjectlist(@RequestBodyList<Student>studentList){
      System.out.println(studentList);
      Map<String,Object>map=newHashMap<String,Object>();
      map.put("code",200);
      map.put("msg","success");
      map.put("data",studentList);
      returnmap;
          }
      }


      8. Spring MVC解决POST请求中文乱码问题

      Spring提供了CharacterEncodingFilter解决POST请求中的中文乱码问题,在web.xml中配置CharacterEncodingFilter。

      <web-app><!--解决POST中文乱码问题 过滤器--><filter><filter-name>encodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>


      9. Spring MVC参数传递案例

      基于Spring MVC实现HttpServletRequest、基本数据类型、Java Bean、数组、List、Map、JSON方式的参数传递。

      案例实现详见链接:案例13 Spring MVC参数传递案例

      目录
      相关文章
      |
      6天前
      |
      缓存 前端开发 Java
      【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
      Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
      【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
      |
      30天前
      |
      Java 数据库连接 Spring
      后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
      文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
      后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
      |
      1月前
      |
      XML JSON 数据库
      SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
      这篇文章详细介绍了RESTful的概念、实现方式,以及如何在SpringMVC中使用HiddenHttpMethodFilter来处理PUT和DELETE请求,并通过具体代码案例分析了RESTful的使用。
      SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
      |
      1月前
      |
      前端开发 应用服务中间件 数据库
      SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
      这篇文章通过一个具体的项目案例,详细讲解了如何使用SpringMVC、Thymeleaf、Bootstrap以及RESTful风格接口来实现员工信息的增删改查功能。文章提供了项目结构、配置文件、控制器、数据访问对象、实体类和前端页面的完整源码,并展示了实现效果的截图。项目的目的是锻炼使用RESTful风格的接口开发,虽然数据是假数据并未连接数据库,但提供了一个很好的实践机会。文章最后强调了这一章节主要是为了练习RESTful,其他方面暂不考虑。
      SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
      |
      1月前
      |
      JSON 前端开发 Java
      Spring MVC返回JSON数据
      综上所述,Spring MVC提供了灵活、强大的方式来支持返回JSON数据,从直接使用 `@ResponseBody`及 `@RestController`注解,到通过配置消息转换器和异常处理器,开发人员可以根据具体需求选择合适的实现方式。
      88 4
      |
      1月前
      |
      XML 前端开发 Java
      Spring MVC接收param参数(直接接收、注解接收、集合接收、实体接收)
      Spring MVC提供了灵活多样的参数接收方式,可以满足各种不同场景下的需求。了解并熟练运用这些基本的参数接收技巧,可以使得Web应用的开发更加方便、高效。同时,也是提高代码的可读性和维护性的关键所在。在实际开发过程中,根据具体需求选择最合适的参数接收方式,能够有效提升开发效率和应用性能。
      72 3
      |
      1月前
      |
      XML 前端开发 Java
      Spring MVC接收param参数(直接接收、注解接收、集合接收、实体接收)
      Spring MVC提供了灵活多样的参数接收方式,可以满足各种不同场景下的需求。了解并熟练运用这些基本的参数接收技巧,可以使得Web应用的开发更加方便、高效。同时,也是提高代码的可读性和维护性的关键所在。在实际开发过程中,根据具体需求选择最合适的参数接收方式,能够有效提升开发效率和应用性能。
      67 2
      |
      2月前
      |
      前端开发 Java 应用服务中间件
      我以为我对Spring MVC很了解,直到我遇到了...
      所有人都知道Spring MVC是是开发的,却鲜有人知道Spring MVC的理论基础来自于1978 年提出MVC模式的一个老头子,他就是Trygve Mikkjel Heyerdahl Reenskaug,挪威计算机科学家,名誉教授。Trygve Reenskaug的MVC架构思想早期用于图形用户界面(GUI) 的软件设计,他对MVC是这样解释的。MVC 被认为是解决用户控制大型复杂数据集问题的通用解决方案。最困难的部分是为不同的架构组件想出好的名字。模型-视图-编辑器是第一个。
      108 1
      我以为我对Spring MVC很了解,直到我遇到了...
      |
      2月前
      |
      前端开发 Java API
      Spring Boot 中的 MVC 支持
      ### Spring Boot 注解摘要 - **@RestController** - **@RequestMapping** - **@PathVariable** - **@RequestParam** - **@RequestBody**
      26 2
      |
      1月前
      |
      前端开发 Java Spring
      Java 新手入门:Spring Boot 轻松整合 Spring 和 Spring MVC!
      Java 新手入门:Spring Boot 轻松整合 Spring 和 Spring MVC!
      43 0