SpringMVC获得请求数据类型

举报
执久呀 发表于 2022/10/22 21:15:34 2022/10/22
【摘要】 ​目录SpringMVC获得请求数据获得请求参数基本数据类型获得POJO类型参数 获得数组类型参数获得集合类型参数静态资源访问的开启SpringMVC获得请求数据获得请求参数客户端请求参数的格式是:name=value&name=value.....服务器端要获得请求的参数,有时还需要进行数据的封装,SpringMVC可以接受如下类型的参数:基本数据类型pojo类型 参数数据类型参数集合类型...

目录


SpringMVC获得请求数据

获得请求参数

基本数据类型

获得POJO类型参数

 获得数组类型参数

获得集合类型参数

静态资源访问的开启



SpringMVC获得请求数据

获得请求参数

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

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

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

基本数据类型

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

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

然后在网页访问书写参数

 编辑

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

获得POJO类型参数

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

如:

编辑

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

pojo包下的User类

package com.pojo;

public class User {
    private int age;
    private String username;

    public User() {

    }
    public User(int age, String username) {
        this.age = age;
        this.username = username;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public int getAge() {
        return age;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    @Override
    public String toString() {
        return "User{" +
                "age=" + age +
                ", username='" + username + '\'' +
                '}';
    }
}
//配置类,使用注解把这个类放到容器中
@Controller
@RequestMapping(value="/user")
    public class userController {
    @RequestMapping("/quick12")
    @ResponseBody
    public void save12(User user)  {
        System.out.println(user);
    }
}

编辑

 控制台可以看到

编辑

 获得数组类型参数

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

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

 网址搜素输入

编辑

 控制台显示

编辑

获得集合类型参数

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

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

package com.pojo;

import java.util.List;

public class VO {
    private List<User> userList;

    public VO(List<User> userList) {
        this.userList = userList;
    }

    public List<User> getUserList() {
        return userList;
    }

    public void setUserList(List<User> userList) {
        this.userList = userList;
    }

    @Override
    public String toString() {
        return "VO{" +
                "userList=" + userList +
                '}';
    }
}

 userController类下

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

form.jsp页面下

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<%
    String path = request.getContextPath();
    String basepath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<html>
<head>
    <base href="<%=basepath %>"/>
    <meta charset="utf-8"/>
    <title>Insert title here</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/user/quick14" method="post">
<%--表明是第一个User对象username age--%>
<input type="text" name="userList[0].name"><br/>
    <input type="text" name="userList[0].age"><br/>
    <input type="text" name="userList[1].name"><br/>
    <input type="text" name="userList[1].age"><br/>
    <input type="submit" value="提交">
</form>
</body>
</html>

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

编辑

获得集合类型参数

静态资源访问的开启

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

创建一个js下的

编辑


还有ajax.jsp

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<%
    String path = request.getContextPath();
    String basepath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<html>
<head>
    <base href="<%=basepath %>"/>
    <meta charset="utf-8"/>
    <title>Insert title here</title>
    <script src="${pageContext.request.contextPath}/js/jquery-3.3.1.js">
        <%-- 创建一个js数组--%>
        var userList=new Array();
        //给集合添加数据
        userList.push({username:"zhangsan",age:18});
        userList.push({username:"lisi",age:28});


        //发送请求
        $.ajax({
            type:"POST",//请求方式
            url:"${pageContext.request.contextPath}/user/quick15",//请求地址
            date:JSON.stringify(userList),//提交的参数,转为json格式
            contentType:"application/json;charset=utf-8"
        });

    </script>
</head>
<body>

</body>
</html>

userController类下


//配置类,使用注解把这个类放到容器中
@Controller
@RequestMapping(value="/user")
    public class userController {
    @RequestMapping("/quick15")
    @ResponseBody
    public void save15(@ResponseBody List<User> userList) throws Exception {
        System.out.println(userList);
    }
}

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

编辑

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

编辑

 发现是这个jQuery文件找不到

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

<!-- 静态资源访问权限-->
    <mvc:resources mapping="/js/**" location="/js/"/>

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

编辑

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

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

<!-- 静态资源访问权限-->
   <mvc:default-servlet-handler/>

</beans>

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。