掘金日新计划 · 8 月更文挑战第11天--spring-mvc复合数据获取

74 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第11天,点击查看活动详情

今天我们来学习一下复合数据通过表单提交,我们如何来接收数据

1.表单复合数据:复合数据指的是下拉列表和多选框数据和其他inpu框数据组合提交表单


image.png
这种数据我们该如何处理呢?

2.现有表单结构如下所示:

<form action="./apply" method="post">
    <h3>您的姓名</h3>
    <input name="name" class="text"  style="width: 150px">
    <h3>您正在学习的技术方向</h3>
    <select name="course" style="width: 150px">
        <option value="java">Java</option>
        <option value="h5">HTML5</option>
        <option value="python">Python</option>
        <option value="php">PHP</option>
    </select>
    <div>
        <h3>您的学习目的:</h3>
        <input type="checkbox" name="purpose" value="1">就业找工作
        <input type="checkbox" name="purpose" value="2">工作要求
        <input type="checkbox" name="purpose" value="3">兴趣爱好
        <input type="checkbox" name="purpose" value="4">其他
    </div>
    <div style="text-align: center;padding-top:10px" >
        <input type="submit" value="提交" style="width:100px">
    </div>
</form>

我们如何获取这些表单数据呢?接下来我们通过几种方式来获取。

3.数组的形式获取

@PostMapping("apply")
@ResponseBody
public void apply(String name, String course, Integer[] purpose){
}

image.png

4.使用List接收(注意使用List 一定要添加 @RequestParam,注意获取到的是ArrayList形式)

@PostMapping("apply")
@ResponseBody
public void apply2(String name, String course, @RequestParam  List<Integer> purpose){
}

image.png

5.使用map接收(记得添加注解@RequestParam,注意返回的是LinkHashMap格式,如果是多选框,会导致数据丢失)

@PostMapping("apply")
@ResponseBody
public void apply3( @RequestParam Map map){
}

image.png image.png

5.实体的形式获取

定义实体对象

package com.imooc.springmvc.entity;
import java.util.List;
public class Student {
    private String name;
    private String course;
    private List<Integer> purpose;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    //一系列的getter和setter方法
}

调用

//采用实体接收
@PostMapping("apply")
@ResponseBody
public void apply4(Student student){
}

image.png

7.关联对象赋值

这边的新增address对象的信息,用于存储关联数据,关联的字段要使用 实体.字段 来表示

<form action="./apply" method="post">
    <h3>您的姓名</h3>
    <input name="name" class="text"  style="width: 150px">
    <h3>您正在学习的技术方向</h3>
    <select name="course" style="width: 150px">
        <option value="java">Java</option>
        <option value="h5">HTML5</option>
        <option value="python">Python</option>
        <option value="php">PHP</option>
    </select>
    <div>
        <h3>您的学习目的:</h3>
        <input type="checkbox" name="purpose" value="1">就业找工作
        <input type="checkbox" name="purpose" value="2">工作要求
        <input type="checkbox" name="purpose" value="3">兴趣爱好
        <input type="checkbox" name="purpose" value="4">其他
    </div>

    <div>
        <h3>邮政编码</h3>
        <input name="address.code" class="text"  style="width: 150px">
        <h3>手机号</h3>
        <input name="address.mobile" class="text"  style="width: 150px">
    </div>

    <div style="text-align: center;padding-top:10px" >
        <input type="submit" value="提交" style="width:100px">
    </div>
</form>

新增address实体(一定要getter和setter方法,不然会获取不到)

package com.imooc.springmvc.entity;
public class Address {
    private String code;
    private String mobile;

    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }

    public String getMobile() {
        return mobile;
    }
    public void setMobile(String mobile) {
        this.mobile = mobile;
    }
}

student实体关联address实体 image.png
调用接口返回值为: image.png 获取邮政编码字段,使用

System.out.println(student.getAddress().getCode());