SpringMVC--03--前端传数组给后台

news2024/11/15 8:43:30

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 案例1
    • 乘客个人信息
    • 方法1:表单提交,以字段数组接收
    • 方法2:表单提交,以BeanListModel接收
    • 方法3:==将Json对象==序列化成Json字符串提交,以List接收
      • 3.1 List<Map<String,Object>
      • 3.2 List< User>
  • 案例 2:后台接受数组和集合的案例
    • 基本user配置
    • 场景1: POST提交 -前端传==数组==后台如何接受
        • ["2021","2022"]
        • 数组 String [ ] 接
        • List< String>接
    • 场景2: get提交 :前端在URL里面传id1,id2后台如何接受?
    • 场景3: 前端传==对象集合==后台如何接受?
    • 场景4 :综合情况


案例1

我要在一个表单里同时一次性提交多名乘客的个人信息到SpringMVC,前端HTML和SpringMVC Controller里该如何处理?

乘客个人信息

public class User {

    private Integer id;
    private String name;
    private String pwd;

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pwd='" + pwd + '\'' +
                '}';
    }
    // .......后面还有getter、setter方法,省略了
 }

方法1:表单提交,以字段数组接收

  • HTML代码如下:
    <form action="/user/submitUserList_1" method="post">
        ID:<input type="text" name="id"><br/>
        Username:<input type="text" name="name"><br/>
        Password:<input type="text" name="pwd"><br/><br/>

        ID:<input type="text" name="id"><br/>
        Username:<input type="text" name="name"><br/>
        Password:<input type="text" name="pwd"><br/><br/>
        <input type="submit" value="submit">
    </form>
  • Java代码如下:
    @RequestMapping(value = "/submitUserList_1", method ={RequestMethod.POST})
    @ResponseBody
    public String submitUserList_1(HttpServletResponse response,Integer[] id, String[] name, String[] pwd)
                            throws Exception{
        String result = "";
        if(id == null || id.length <= 0){ return "No any ID.中文"; }
        List<User> userList = new ArrayList<User>();
        for (int i = 0; i < id.length; i++ ) {
            User user = new User();
            user.setId(id[i]);
            user.setName(name[i]);
            user.setPwd(pwd[i]);
            userList.add(user);
        }
        result = this.showUserList(userList);
        return result;
    }

方法2:表单提交,以BeanListModel接收

  • HTML代码如下:
    <form action="/user/submitUserList_2" method="post">
        ID:<input type="text" name="users[0].id"><br/>
        Username:<input type="text" name="users[0].name"><br/>
        Password:<input type="text" name="users[0].pwd"><br/><br/>

        ID:<input type="text" name="users[2].id"><br/>
        Username:<input type="text" name="users[2].name"><br/>
        Password:<input type="text" name="users[2].pwd"><br/><br/>
        <input type="submit" value="Submit">
    </form>
  • 除了刚才公用的User类,还要封装一个User的容器类UserModel:
public class UserModel {
    private List<User> users;

    public List<User> getUsers() {
        return users;
    }

    public void setUsers(List<User> users) {
        this.users = users;
    }

    public UserModel(List<User> users) {
        super();
        this.users = users;
    }

    public UserModel() {
        super();
    }

}
  • SpringMVC Controller方法:
    @RequestMapping(value = "/submitUserList_2", method ={RequestMethod.POST})
    @ResponseBody
    public String submitUserList_2(UserModel users)
            throws Exception{
        String result = "";
        List<User> userList = users.getUsers();
        if(userList == null || userList.size() <= 0){ return "No any ID.中文"; }
        result = this.showUserList(userList);
        return result;
    }

方法3:将Json对象序列化成Json字符串提交,以List接收

  • HTML代码:
<head>
    <title>submitUserList_3</title>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <script language="JavaScript" src="/js/jquery.min.js" ></script>
    <script language="JavaScript" src="/js/jquery.json.min.js" ></script>
    <script type="text/javascript" language="JavaScript">
        function submitUserList_3() {alert("ok");
            var customerArray = new Array();
            customerArray.push({id: "1", name: "李四", pwd: "123"});
            customerArray.push({id: "2", name: "张三", pwd: "332"});
            $.ajax({
                url: "/user/submitUserList_3",
                type: "POST",
                contentType : 'application/json;charset=utf-8', //设置请求头信息
                dataType:"json",
                //data: JSON.stringify(customerArray),    //将Json对象序列化成Json字符串,JSON.stringify()原生态方法
                data: $.toJSON(customerArray),            //将Json对象序列化成Json字符串,toJSON()需要引用jquery.json.min.js
                success: function(data){
                    alert(data);
                },
                error: function(res){
                    alert(res.responseText);
                }
            });
        }
    </script>
</head>

<body>
    <h1>submitUserList_3</h1>
    <input id="submit" type="button" value="Submit" onclick="submitUserList_3();">
</body>

3.1 List<Map<String,Object>

 @RequestMapping("/createOrder")
 @ResponseBody
    public int createOrder(@RequestBody List<Map<String,Object>> list ){
    
        if (list != null && list.size() > 0){
           result = this.showList(users);
           return result;
        }
        return 0;
    }

3.2 List< User>

  • Java代码:
    @RequestMapping(value = "/submitUserList_3", method ={RequestMethod.POST})
    @ResponseBody
    public String submitUserList_3(@RequestBody List<User> users)throws Exception{
        String result = "";
        if(users == null || users.size() <= 0){ return "No any ID.中文"; }
        result = this.showUserList(users);
        return result;
    }

案例 2:后台接受数组和集合的案例

基本user配置

  • 首先我们模拟创建一个user的实例
@Data
public class User {
 
    private String id;
    private String name;
    private Integer age;
 
}
  • 创建一个公共的返回值的Result类
import lombok.Data;
 

@Data
public class Result<T> {
 
    private static final long serialVersionUID = 1L;
 
    private Integer code;
    private String msg;
    private T data;
 
    public static Result fail() {
        Result Result = new Result();
        Result.setCode(1);
        Result.setMsg("服务器错误!!!");
        return Result;
    }
 
    public static Result fail(String msg) {
        Result Result = new Result();
        Result.setCode(1);
        Result.setMsg(msg);
        return Result;
    }
 
    public static <T> Result success(T data) {
        Result Result = new Result();
        Result.setCode(0);
        Result.setData(data);
        return Result;
    }
 
    public static Result success() {
        Result Result = new Result();
        Result.setCode(0);
        Result.setMsg("操作成功!");
        Result.setData("success");
        return Result;
    }
 
 
}

场景1: POST提交 -前端传数组后台如何接受

[“2021”,“2022”]
var ids = ['2021','2022'];
$.ajax({
	type : 'POST',
	url: 'course/delete',
	contentType : "application/json" ,
	data: JSON.stringify(ids),
	success : function(data) {
	}
});

数组 String [ ] 接
@RequestMapping(value = "/delete", method = {RequestMethod.POST})
@ResponseBody
public void delete(@RequestBody String[] id) {
	for (String string : id) {
        System.out.println(string);
    }
}

List< String>接
 @PostMapping("/saveUserIds")
    public Result saveStrings(@RequestBody List<String> list) {
 
        logger.info("传入的参数是{}",list);
        //模拟逻辑层做一个入参校验
        if (CollectionUtils.isEmpty(list)){
            return Result.fail();
        }
        return Result.success();
    }

在这里插入图片描述

场景2: get提交 :前端在URL里面传id1,id2后台如何接受?

  • @RequestParam或@PathVariable
  • 前台可以直接URL中通过id1,id2的方式入参,后台直接通过数组或List的的方式来接收,作为动态sql的入参,使用动态sql的foreach语法:
    @ApiOperation("通过alarmId删除报警记录")
    @DeleteMapping("/delete/{alarmIds}")
    public Result delete(@ApiParam("报警记录id") @PathVariable Long[] alarmIds){
        return alarmRecordService.deleteAlarmRecordByIds(alarmIds);
    }

场景3: 前端传对象集合后台如何接受?

[
	{
	   "id":"1",
	   "name":"辰兮",
	   "age":"22"
     },
	{
	   "id":"2",
	   "name":"辰兮要努力",
	   "age":"23"
     }
]
   /**
     * 前端传对象集合 后端用集合接
     * @param userList
     * @return
     */
    @PostMapping("/saveList")
    public Result saveUserList(@RequestBody List<User> userList) {
 
        logger.info("传入的参数是{}",userList);
 
        //模拟逻辑层做一个入参校验
        if (CollectionUtils.isEmpty(userList)){
            return Result.fail();
        }
        return Result.success();

在这里插入图片描述

场景4 :综合情况

就是前端除了传一个集合外,还要传一个字符串或者数字等属性

  • 入参案例如下
{
	"userList":[{"id ":"1","name":"辰兮","age":"22"},{"id":"2","name":"辰兮要努力","age":"23"}],
    "open":1
}

再创建一个对象接受

/**
 * @program: demo
 * @description: 用户对象接受类
 */
@Data
public class UserVo {
 
    private List<User> userList;
    private Integer open;
}
/**
 * @program: demo
 * @description: 前后端传值交互案例
 */
@RestController
@RequestMapping("/user")
public class UserController {
 
    //打印日志
    private static final Logger logger = LoggerFactory.getLogger(UserController.class);
 
    /**
     * 业务场景:前端传一个数组➕一个字符串或者数字等
     * @param userVo
     * @return
     */
    @PostMapping("/saveUserVo")
    public Result saveUserVoList(@RequestBody UserVo userVo) {
 
        logger.info("传入的参数是{}",userVo);
 
        return Result.success();
    }
}

我们可以debug查看一下入参,很清晰的可以看到前端传入的参数
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1490133.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

S2---FPGA-A7板级原理图硬件实战

视频链接 FPGA-A7板级系统硬件实战01_哔哩哔哩_bilibili FPGA-A7板级原理图硬件实战 基于XC7A100TFGG484的FPGA硬件设计流程图 A7核心板&#xff0c;是基于XILINX公司的ARTIX-7系列100T的XC7A100T,2FGG484I这款芯片开发的高性能核心板&#xff0c;具有高速&#xff0c;高带宽&a…

B084-SpringCloud-Zuul Config

目录 zuul系统架构和zuul的作用zuul网关实现配置映射路径过滤器 Config概述云端管理本地配置 zuul zuul是分布式和集群后前端统一访问入口 系统架构和zuul的作用 zuul把自己注册进eureka&#xff0c;然后可通过前端传来的服务名发现和访问对应的服务集群 为了预防zuul单点故…

Raid5阵列数据恢复+Openmediavault配置内网与外网远程访问+服务器到服务器的大量文件转移备份

一、适用场景&#xff1a; 1、OpenMediaVault&#xff0c;是一个开源的&#xff08;免费&#xff09;基于Debian Linux的下一代网络附加存储(NAS)解决方案。 2、易于使用的 WEB 管理界面&#xff1a;OpenMediaVault 的用户界面设计直观&#xff0c;即使是没有 Linux 经验的用户…

FPGA-AXI4接口协议概述

假设我们要传一帧1080P的图片到显示屏显示&#xff0c;那么需要多大的储存空间呢&#xff1f; 一帧1080P的RGB565图像数据需要1920*1080*1633.1776Mb 存储空间 下图是ZYNQ-7000系列中Block RAM的大小&#xff1a; 可以看到最大存储空间的BRAM都不能存储一帧图片&#xff0c;那…

#QT(智能家居界面-布局)

1.IDE&#xff1a;QTCreator 2.实验&#xff1a; 水平布局&#xff0c;垂直布局&#xff0c;栅格布局&#xff08;弹簧&#xff09; 界面自动调整 3.记录 注意弹簧不是拖拽拉长&#xff0c;而是使用栅格布局 运行发现窗口放大缩小可以自动调整 如果想要重新布局&#xff0c;需…

【短时交通流量预测】基于双层BP神经网络

课题名称&#xff1a;基于双层BP神经网络的短时交通流量预测 版本时间&#xff1a;2023-04-27 代码获取方式&#xff1a;QQ&#xff1a;491052175 或者 私聊博主获取 模型简介&#xff1a; 城市交通路网中交通路段上某时刻的交通流量与本路段前几个时段的交通流量有关&…

为什么各品牌主食冻干差价那么大?真正性价比高的主食冻干分享

随着科学养猫知识的普及&#xff0c;主食冻干喂养逐渐受到了许多铲屎官的青睐。然而&#xff0c;也有不少的铲屎官看到主食冻干的价格望而却步。实际上&#xff0c;像我这样的资深铲屎官早已开始主食冻干喂养。虽然主食冻干的价格相对于烘焙粮和膨化粮要高一些&#xff0c;但它…

es6 相关面试题

1 var, let ,const 区别&#xff1f; 2 手写将对象进行合并 手写合并对象 3 普通函数和箭头函数区别&#xff1f; 4 find 和 filter的区别&#xff1f; 5 some和every区别&#xff1f;

OCR 文字识别在未来会有哪些发展趋势?

随着技术的不断进步&#xff0c;OCR&#xff08;光学字符识别&#xff09;文字识别技术也在不断发展。未来&#xff0c;OCR 文字识别技术将会呈现以下几个发展趋势&#xff1a; 一、更高的识别准确率 OCR 技术的核心是识别准确率。随着深度学习等人工智能技术的发展&#xff0c…

测温线夹装置

测温线夹是一种用于测量温度的装置&#xff0c;通常用于电力系统中监测电气设备的温度。它可以安装在电气设备的导线上&#xff0c;通过感应导线的温度来测量电气设备的运行状态。测温线夹通常由金属材料制成&#xff0c;具有耐高温、耐腐蚀等特点&#xff0c;适用于各种恶劣的…

一文读懂Persistence One- 如何将Restaking带入Cosmos

Persistence One正在将Restaking引入Cosmos。用户将能够通过pSTAKE、Stride、Quicksilver和Milkyway将Liquid Staked Tokens&#xff08;如ATOM、TIA、DYDX等&#xff09;存入Persistence One&#xff0c;对其进行Restaking&#xff0c;从而安全地连接更多区块链&#xff0c;首…

苹果电脑专业的Mac垃圾清理工具CleanMyMac X4.14.7

CleanMyMac X是一款专业的Mac清理工具&#xff0c;它具有强大的功能和易用的界面&#xff0c;可以帮助用户快速清理Mac上的无用文件和垃圾&#xff0c;优化系统性能&#xff0c;提升电脑运行速度。 该软件的核心功能包括智能扫描与清理、应用程序管理、隐私保护和系统维护等。…

Python的http模块requests

模块简介&#xff1a; requests 库是一个 python中比较有名的 http请求的库&#xff0c;能处理 get,post,put,delete 等 restful请求&#xff0c;能设置 header&#xff0c;cookie,session 等操作&#xff0c;也是作为爬虫的基础库&#xff0c;它目前还不能异步请求,如果要支持…

Spring循环依赖:原因与解决方法

在Spring框架中&#xff0c;处理循环依赖一直备受关注。这是因为Spring团队在源代码中为了解决这个问题做了大量的处理和优化。同时&#xff0c;循环依赖也是Spring高级面试中的必考问题&#xff0c;对其深入了解可以成为面试中的制胜法宝。本文将详细介绍Spring循环依赖的产生…

【Datawhale组队学习:Sora原理与技术实战】Attention和LLM

Attention Attention 注意力&#xff0c;从两个不同的主体开始。 论文&#xff1a;https://arxiv.org/pdf/1703.03906.pdf seq2seq代码仓&#xff1a;https://github.com/google/seq2seq 计算方法&#xff1a; 加性Attention&#xff0c;如&#xff08;Bahdanau attention&…

备战蓝桥杯---图论应用1

目录 1.增加虚点建图&#xff1a; 2.抽象图的迪杰斯特拉&#xff1a; 3.用bitset优化弗洛伊德&#xff1a; 4.有向图的Prim/kruskal&#xff1a; 1.增加虚点建图&#xff1a; 我们当然可以每一层与上一层的点再连上一条边&#xff0c;但这样子边太多了超内存&#xff0c;我们…

【学习心得】网站运行时间轴(爬虫逆向)

一、网站运行时间轴 掌握网站运行时间轴&#xff0c;有助于我们对“请求参数加密”和“响应数据加密”这两种反爬手段的深入理解。 二、从网站运行的时间轴角度来理解两种反爬手段 1、加载HTML&#xff1a; 这是浏览器访问网站时的第一步&#xff0c;服务器会返回基础…

6.Java---二维数组

打印二维数组的每个元素 上图所示,我们打印的时候将行列的数字写死,但是实际上如果这个数组有很多元素我们还要一个个数数嘛?这不是很占用我们的时间啦!因此引出下文. 代码精进 二维数组的每个元素是一个一维数组 打印二维数组的法2 打印出的格式如下: 不规则的二维数组…

LeetCode每日一题之 复写0

目录 题目介绍&#xff1a; 算法原理&#xff1a; 特殊位置处理&#xff1a; 代码实现&#xff1a; 题目介绍&#xff1a; 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 算法原理&#xff1a; 这种对数组元素进行修改&#xff0c;移动的题目我们仍然可以…

使用Android Native Hook技术解决VLC播放器闪退的问题

文章目录 1.概述2.问题描述3.问题分析4.问题解决5.总结 1.概述 在做公司的一个TOB的需求时&#xff0c;发现调起Unity提供的3D播放器播放网络在线视频时闪退了&#xff0c;然后就拉着相关部门的人一起分析问题&#xff0c;最后定位到是VLC里面用到的系统日志打印函数在部分的系…