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 MVC:构建Web应用
      【5月更文挑战第15天】Spring MVC是Spring框架的Web应用模块,基于MVC模式实现业务、数据和UI解耦。常见问题包括:配置DispatcherServlet、Controller映射错误、视图解析未设置、Model数据传递遗漏、异常处理未配置、依赖注入缺失和忽视单元测试。解决这些问题可提升代码质量和应用性能。注意配置`web.xml`、`@RequestMapping`、`ViewResolver`、`Model`、`@ExceptionHandler`、`@Autowired`,并编写测试用例。
      292 3
      |
      4天前
      |
      前端开发 Java 关系型数据库
      使用IDEA搭建一个Spring + AOP (权限管理 ) + Spring MVC
      使用IDEA搭建一个Spring + AOP (权限管理 ) + Spring MVC
      |
      6天前
      |
      JSON 前端开发 Java
      【JavaEE】让“单车变摩托”的神级框架—Spring MVC的深入讲解(下)
      【JavaEE】让“单车变摩托”的神级框架—Spring MVC的深入讲解
      7 0
      |
      6天前
      |
      JSON 前端开发 Java
      【JavaEE】让“单车变摩托”的神级框架—Spring MVC的深入讲解(上)
      【JavaEE】让“单车变摩托”的神级框架—Spring MVC的深入讲解
      7 0
      |
      6天前
      |
      设计模式 前端开发 Java
      初识Spring MVC
      初识Spring MVC
      14 0
      |
      6天前
      |
      前端开发 Java 应用服务中间件
      Spring MVC框架概述
      Spring MVC 是一个基于Java的轻量级Web框架,采用MVC设计模型实现请求驱动的松耦合应用开发。框架包括DispatcherServlet、HandlerMapping、Handler、HandlerAdapter、ViewResolver核心组件。DispatcherServlet协调这些组件处理HTTP请求和响应,Controller处理业务逻辑,Model封装数据,View负责渲染。通过注解@Controller、@RequestMapping等简化开发,支持RESTful请求。Spring MVC具有清晰的角色分配、Spring框架集成、多种视图技术支持以及异常处理等优点。
      20 1
      |
      6天前
      |
      监控 前端开发 Java
      SpringBoot与SpringMVC有哪些区别?
      SpringBoot和SpringMVC是Java开发中常用的两个框架,它们都是由Spring框架所提供的,但在功能和使用方式上有着一些区别。
      24 2
      |
      6天前
      |
      数据采集 前端开发 Java
      数据塑造:Spring MVC中@ModelAttribute的高级数据预处理技巧
      数据塑造:Spring MVC中@ModelAttribute的高级数据预处理技巧
      24 3
      |
      6天前
      |
      存储 前端开发 Java
      会话锦囊:揭示Spring MVC如何巧妙使用@SessionAttributes
      会话锦囊:揭示Spring MVC如何巧妙使用@SessionAttributes
      14 1
      |
      6天前
      |
      前端开发 Java Spring
      数据之桥:深入Spring MVC中传递数据给视图的实用指南
      数据之桥:深入Spring MVC中传递数据给视图的实用指南
      34 3