• SpringMVC获得请求数据类型


    目录

    SpringMVC获得请求数据

    获得请求参数

    基本数据类型

    获得POJO类型参数

     获得数组类型参数

    获得集合类型参数

    静态资源访问的开启


    SpringMVC获得请求数据

    获得请求参数

    客户端请求参数的格式是:name=value&name=value.....

    服务器端要获得请求的参数,有时还需要进行数据的封装,SpringMVC可以接受如下类型的参数:

    • 基本数据类型
    • pojo类型 参数
    • 数据类型参数
    • 集合类型参数

    基本数据类型

    1. //配置类,使用注解把这个类放到容器中
    2. @Controller
    3. @RequestMapping(value="/user")
    4. public class userController {
    5. @RequestMapping("/quick11")
    6. @ResponseBody
    7. public void save11(String username,int age) {
    8. System.out.println(username);
    9. System.out.println(age);
    10. }
    11. }

     这个方法不进行页面跳转和回写数据@ResponseBody和void)

    然后在网页访问书写参数

     

     就可以看到控制台打印出张三 18,这就是基本数据类型

    获得POJO类型参数

    Controller中的业务方法的pojo参数的属性名与请求参数的name一直,参数值会自动映射匹配

    如:

     上图中的username和age属于User之中的,SpringMVC就会自动将这些值加进User去

    pojo包下的User类

    1. package com.pojo;
    2. public class User {
    3. private int age;
    4. private String username;
    5. public User() {
    6. }
    7. public User(int age, String username) {
    8. this.age = age;
    9. this.username = username;
    10. }
    11. public void setAge(int age) {
    12. this.age = age;
    13. }
    14. public int getAge() {
    15. return age;
    16. }
    17. public String getUsername() {
    18. return username;
    19. }
    20. public void setUsername(String username) {
    21. this.username = username;
    22. }
    23. @Override
    24. public String toString() {
    25. return "User{" +
    26. "age=" + age +
    27. ", username='" + username + '\'' +
    28. '}';
    29. }
    30. }
    1. //配置类,使用注解把这个类放到容器中
    2. @Controller
    3. @RequestMapping(value="/user")
    4. public class userController {
    5. @RequestMapping("/quick12")
    6. @ResponseBody
    7. public void save12(User user) {
    8. System.out.println(user);
    9. }
    10. }

     控制台可以看到

     获得数组类型参数

    Controller的业务方法数组名称与请求参数的name一致,参数值救赎自动映射配置。

    1. //配置类,使用注解把这个类放到容器中
    2. @Controller
    3. @RequestMapping(value="/user")
    4. public class userController {
    5. @RequestMapping("/quick13")
    6. @ResponseBody
    7. public void save13(String[] strs) {
    8. //数组直接打印是地址,为了更清楚看到,用Arrays,asList(作为集合打印)
    9. System.out.println(Arrays.asList(strs));
    10. }
    11. }

     网址搜素输入

     控制台显示

    获得集合类型参数

    获得集合参数时,要将集合参数包装到pojo对象才可以

    所以我们在pojo包下创建一个vo对象

    1. package com.pojo;
    2. import java.util.List;
    3. public class VO {
    4. private List userList;
    5. public VO(List userList) {
    6. this.userList = userList;
    7. }
    8. public List getUserList() {
    9. return userList;
    10. }
    11. public void setUserList(List userList) {
    12. this.userList = userList;
    13. }
    14. @Override
    15. public String toString() {
    16. return "VO{" +
    17. "userList=" + userList +
    18. '}';
    19. }
    20. }

     userController类下

    1. //配置类,使用注解把这个类放到容器中
    2. @Controller
    3. @RequestMapping(value="/user")
    4. public class userController {
    5. @RequestMapping("/quick14")
    6. @ResponseBody
    7. public void save14(VO vo){
    8. System.out.println(vo);
    9. }
    10. }

    form.jsp页面下

    1. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
    2. <%
    3. String path = request.getContextPath();
    4. String basepath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
    5. %>
    6. <head>
    7. "<%=basepath %>"/>
    8. "utf-8"/>
    9. Insert title here
    10. "${pageContext.request.contextPath}/user/quick14" method="post">
    11. <%--表明是第一个User对象username age--%>
    12. type="text" name="userList[0].name">
    13. type="text" name="userList[0].age">
    14. type="text" name="userList[1].name">
    15. type="text" name="userList[1].age">
    16. type="submit" value="提交">

    运行之后在页面输入数据,控制台输出 

    获得集合类型参数

    静态资源访问的开启

    当使用ajax提交时,可以指定contentType为json形式,那么在方法参数位置使用@RequestBody可以是直接接收结合数据而无需使用POJO进行包装。

    创建一个js下的

    还有ajax.jsp

    1. <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
    2. <%
    3. String path = request.getContextPath();
    4. String basepath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
    5. %>
    6. <head>
    7. "<%=basepath %>"/>
    8. "utf-8"/>
    9. Insert title here

    userController类下

    1. //配置类,使用注解把这个类放到容器中
    2. @Controller
    3. @RequestMapping(value="/user")
    4. public class userController {
    5. @RequestMapping("/quick15")
    6. @ResponseBody
    7. public void save15(@ResponseBody List userList) throws Exception {
    8. System.out.println(userList);
    9. }
    10. }

    运行服务器后,发现控制台没有打印数据

     一般是页面出现了问题,打开开发者工具中查看

     发现是这个jQuery文件找不到

    这是静态资源访问权限的问题,解决方式是在spring-mvc中加入

    1. <mvc:resources mapping="/js/**" location="/js/"/>

    重启服务器运行之后就可以访问了,在网络中查看访问包的情况,共有三次请求

     运行之后控制台会打印数组中的数据。

    也可以在spring-mvc中配置,只需写入一个即可(常用)

    1. <mvc:default-servlet-handler/>
    2. beans>

    解释:访问资源时,SpringMVC找对应的匹配地址,如果找不到则交给原始的容器(这原始的容器为tomcat)tomcat可以找有能力访问静态资

  • 相关阅读:
    好好住画像全攻略
    一篇文章带你全面了解智能地面水处理一体机
    含文档+PPT+源码等]精品基于Uniapp实现的美食APP[包运行成功]计算机毕业设计安卓项目源码
    2022年最新java大厂面试真题剖析:如何设计一个高并发系统?
    空气中PM2.5问题的研究(matlab代码)
    推箱子游戏设计与实现(Java+swing+JAWT)
    如何在外网访问公司项目?快解析实现内网ip让公网连接
    yolov6训练自己的数据记录+yolov5对比测试
    向数据报表添加一个合计字段
    C#/.NET/.NET Core优秀项目和框架2024年1月简报
  • 原文地址:https://blog.csdn.net/weixin_60719453/article/details/125842873