Spring MVC数据绑定问题(实体中包含集合数据绑定问题)

Spring MVC:数据绑定 Spring MVC数据绑定介绍 阅读详情

概述 

之前的写了一篇《springMVC数据绑定参数》的文章(https://blog.youkuaiyun.com/javaYouCome/article/details/90692437),大概包含了所有能遇到的数据绑定参数的问题,可最近的项目中遇到了一个数据绑定的抗,一般是不会发现,可如果遇到了绝对让够吃一壶的。虽然解决很好处理,还是跟着我看下问题的原因吧。

一、正常数据绑定

首先来看下实体中带有集合对象的数据绑定的例子:Student(学生)对象有name, age属性,Teacher(老师)对象有name, age, List<Student> students这三个属性。代码如下:

@Data
class Student {
    private String name;
    private int age;
}
@Data
class Teacher   {
    private String name;
    private int age;
    private List<Student> students;
}

Controller中的数据绑定代码如下(前台传递一个Teacher对象直接输出)

@PostMapping("/test")
public Teacher test(@RequestBody Teacher teacher){
    System.out.println(teacher);
    return teacher;
}

Postman测试传递一个Teacher的Json数据,观察输出结果。(绑定成功)

二、异常情况(结果会很意外)

数据库中有两个表(t_link:客户联系人)和(t_custer:客户),映射的实体是TLink有name, sex两个属性,TCuster有name, age和List<TLink> tLinks三个属性,代码如下

@Data
class TLink {
    private String name;
    private String sex;
}
@Data
class TCuster   {
    private String name;
    private int age;
    private List<TLink> tLinks;
}

Controller中和上面的相同

@PostMapping("/test1")
public TCuster test(@RequestBody TCuster tCuster){
    System.out.println(tCuster);
    return tCuster;
}

Postman测试传递一个TCuster的Json数据,观察输出结果。( WTF失败)

眼尖的同学到这,可能已经解决问题了,就是在后台往前台返回的teacher对象,里面‘tLinks’竟然被转成了“tlinks”了。这个坑不知道有没有同学和我一样踩的很着实。

究其原因得想到将Json转成Teacher,再将对象转成Json是谁的事--Jackson的MappingJackson2HttpMessageConverter转换器的锅。我猜想它在序列化和反序列化(json和javaBean互转)时,根据json的key和对象属性的名称对应时,“驼峰命名”规则存在bug,导致的将类似“tLinks”的key名称去对象中查找叫“tlinks”的成员变量,自然赋不上值。最后往前台返回teacher对象,jackson序列化成json,“驼峰命名”bug再次处理成员tLinks时,又搞成了“tlinks”。

解决办法:

将实体中的所有成员变量名称,规范化命名,将类Teachert的成员tLinks,改成links。继续测试:成功。

(完) 

【Spring】— Spring MVC复杂数据绑定 针对这种情况,可以使用集合数据绑定,即在包装类中定义一个包含对象类的集合,然后在接收方法中将参数类型定义为该包装类的集合。在上述代码的两个方法中,通过toUserEdit()方法将跳转到user_edit.jsp页面,通过editUsers()方法将执行用户批量更新操作,其中该方法的UserVo类型参数用于绑定并获取页面传递过来的用户数据。实际项目开发中,除了简单数据类型外,还会经常遇到一些比较复杂的数据绑定问题,比如数组的绑定、集合的绑定,接下来将具体讲解一下数组绑定和集合绑定的使用。 阅读详情

相关推荐

【Spring】— Spring MVC简单数据绑定(一)

在执行程序时,Spring MVC根据客户端请求参数的不同将请求消息中的信息以一定的方式转换并绑定到控制器类的方法参数中。这种将请求消息数据与后台方法参数建立连接的过程就是Spring MVC中的数据绑定。在数据绑定过程中,Spring MVC框架会通过数据绑定组件(DataBinder)将请求参数串的内容进行类型转换,然后将转换后的值赋给控制器类中方法的形参,这样后台方法就可以正确绑定并获取客户端请求携带的参数。具体的信息处理过程的步骤如下。

衍生星球的博客 1629

自定义springMVC接受参数的规则

/ 定义注解属性这里如何转换时看你的具体的业务,我这个就是要求前端的参数名和我后端的字段名能匹配就是了,就不用去一定遵守什么小驼峰还是大驼峰@Component//设置优先级@Order(1)@Resource@Lazy@Override// 判断参数是否带有@CustomParam注解@Override// 根据自定义规则解析参数值//拿到HttpServletRequest对象//获得inputStream。

qq_52072614的博客 618

SpringMVC表单标签进行数据绑定(图书管理)Demo

SpringMVC表单标签进行数据绑定(图书管理)DemoSpringMVC表单标签进行数据绑定(图书管理)Demo

SpringMVC绑定json数据

SpringMVC绑定json数据 1、单个参数传参 1、新建一个concatList.jsp,用于验证ajax传递和接收。 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <% String path = request.getContextPath(); %> <!DOCTYPE html> <html> <script

qq_42906423的博客 662

SpringMVC数据绑定及数据类型转换

SpringMVC数据绑定及数据类型转换 文档中付例子

SAE J1850协议:从波形解析到汽车诊断实战

本文深入解析SAE J1850协议在汽车诊断中的应用,重点对比其PWM和VPW两种实现方式的波形特征、帧结构及诊断要点。通过实测案例,详细介绍了如何通过波形分析精准定位通用和福特等美系车型的通信故障,提升汽车电子诊断实战能力。

hill8的博客 965

Spring MVC的数据绑定

数据绑定概述简单数据绑定绑定默认数据类型绑定简单数据类型绑定POJO类型当请求参数含有中文,后台处理乱码绑定包装POJO自定义数据绑定Converter接口Formatter接口复杂数据绑定绑定数组绑定集合 概述 Spring MVC会根据客户端请求参数的不同,将请求参数以一定的方式转换并绑定到控制器类的方法参数中。Spring MVC会通过数据绑定组件(DataBinder) 将这种请求参数与后台方法参数建立连接的过程就叫Spring MVC的数据绑定。绑定过程如下: 由上图可知,Spring M

weixin_44949462的博客 3697

偷懒必备:3种方法快速移植MFC界面资源(含.rc文件打不开解决方案)

本文针对MFC桌面应用开发,详细介绍了三种快速移植界面资源的实战方法:直接编辑.rc文件、利用Visual Studio“添加现有项”进行可视化挂载,以及双实例拖拽应急方案。文章重点剖析了.rc文件无法打开的常见问题,提供了通过修复rc.exe等关键文件来根治此问题的解决方案,帮助开发者高效复用资源,规避ID冲突等陷阱。

weixin_28358083的博客 272

数据绑定和表单标签库

数据绑定和表单标签库 1. 数据绑定 在Spring mvc 框架中,数据绑定的含义有: ①绑定请求参数输入值到领域模型(Model); ②模型数据到视图的绑定(输入验证失败时:el表达式); ③模型数据到表单元素的绑定(如下拉列表选项值有控制器初始化) 2. 表单标签库 JSP 页面使用 Spring 表单标签库时,必须在 JSP 页面开头处声明 taglib 指令,如下: <%@ taglib uri="http://www.springframework.org/tags/form" prefi

mxc 886

MySQL 8.0数据库崩了别慌!手把手教你仅凭一个.ibd文件找回数据(附Go工具包)

本文详细介绍了在MySQL 8.0数据库崩溃后,如何仅凭.ibd文件恢复数据的完整流程。通过使用Go语言工具包和ALTER TABLE技巧,即使没有备份也能实现数据重生。文章包含从环境准备到数据验证的全方位指导,帮助DBA和开发者应对紧急数据恢复场景。

weixin_29235923的博客 419

Nuclei漏洞扫描:从零到精通的Windows实战指南

本文详细介绍了Nuclei漏洞扫描工具在Windows平台上的安装与使用教程,从基础安装到高级实战技巧全面覆盖。通过具体案例展示如何利用Nuclei的模板库快速检测常见漏洞,并提供自定义POC开发指南,帮助安全从业者高效开展漏洞扫描工作。

weixin_28683689的博客 248

SpringMVC表单标签简介

SpringMVC表单标签简介    在使用SpringMVC的时候我们可以使用Spring封装的一系列表单标签,这些标签都可以访问到ModelMap中的内容。下面将对这些标签一一介绍。    在正式介绍SpringMVC的表单标签之前,我们需要先在JSP中声明使用的标签,具体做法是在JSP文件的顶部加入以下指令:   &lt;%@taglib uri="http://www.spri...

Elim的博客 1369

ChipCamp探索系列 -- 7A. 开源CPU之BOOM的来龙去脉

本文梳理一下Berkeley的乱序超标量CPU项目----Berkeley Out of Order Machine (BOOM),作为探索7系的首篇(7A)。

ChipCamp的博客---https://chipcamp.blog.youkuaiyun.com/ 1558

Spring MVC复杂数据绑定-绑定集合

将图12.10所示页面中的用户名zhangsan改为tom,lisi改为rose,并勾选两项数据前面的复选框,然后单击“修改”按钮后,浏览器会跳转到success.jsp页面中。此时控制台的打印信息如图12.11所示。针对这种情况,可以使用集合数据绑定,即在包装类中定义一个包含对象类的集合,然后在接收方法中将参数类型定义为该包装类的集合。注意:在使用集合数据绑定时,后台方法中不支持直接使用集合形参进行数据绑定,所以需要使用包装POJO作为参数,然后在包装POJO中包装一个集合属性。

夏天又到了的专栏 1108

使用Matlab实现海洋监视雷达检测仿真

海洋监视雷达是一项重要的海洋探测技术,可以用于海上船只、飞机、潜艇等目标的探测和监视,具有广泛的应用价值。本篇文章将介绍如何使用Matlab进行海洋监视雷达的检测仿真,并提供相应的源代码。本篇文章提供了利用Matlab进行海洋监视雷达检测仿真的基本思路和代码实现。读者可以根据自己的需求进行修改和优化,以适应不同的应用场景。使用Matlab实现海洋监视雷达检测仿真。

2301_78484069的博客 448

对CryptoDriver里密钥格式定义的探索(1)

一入网络安全才发现深似海,传统汽车MCU码农转型之路异常艰难。在CP AUTOSAR中的CryptoDriver SWS对密钥格式的需求来源于RFC,其中要求了RSA、ECC、SHE等key material的格式。再往下看,我就有些迷糊了,例如关于RSA Private Key的OCTEE STRING格式根据IETF RFC8017,Public Key又得根据RFC5280,完全不得其解。所以今天先从生成密钥对,并对其进行解析开始,一步一步拆解。

认真搞搞汽车MCU 527

Spring MVC数据绑定和响应学习笔记

自定义类型转换器使用场景Spring MVC默认提供了一些常用的类型转换器,这些类型转换器,可以将客户端提交的参数自动转换为处理器形参类型的数据。然而默认类型转换器并不能将提交的参数转换为所有的类型。此时,就需要开发者自定义类型转换器,来将参数转换为程序所需要的类型。System.out.println("出生日期:"+birthday);类型转换失败,这时候就需要类型转换器。

小吴 1497

解决anaconda占用C盘空间过多问题

anaconda就算安装在其他盘,默认会把索引、锁定文件、压缩包等都放到系统盘(C盘),我用了两年,占用30GB。 1. 卸载不用的虚拟环境 查看已安装的虚拟环境 conda env list 卸载不用的、过期的虚拟环境 conda remove -n (要卸载的环境的名字) --all 2. 删除索引缓存、锁定文件、未使用过的包和tar包 conda clean -a 清理完之后,删除了15GB,还剩15GB,舒服了 ...

沉迷单车的追风少年 3万+

Spring MVC数据绑定和响应 你了解多少?

数据绑定的概念 在程序运行时,Spring MVC接收到客户端的请求后,会根据客户端请求的参数和请求头等数据信息,将参数以特定的方式转换并绑定到处理器的形参中。Spring MVC中将请求消息数据与处理器的形参建立连接的过程就是Spring MVC的数据绑定。

冷心笑看丽美人 ~ blog 1442

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Spring MVC 数据绑定教程

集合绑定List/Set必须使用Map需特殊格式参数名类型匹配表单值需能转换为目标类型(如数字转Double)命名规范表单字段名与参数名/属性名严格一致乱码处理优先级推荐使用过滤器而非手动设置。

xiaoyu070321的博客 876

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

一文解决Spring MVC的数据绑定

数据绑定介绍 什么是数据绑定? 在执行程序时,Spring MVC会根据客户端请求参数的不同,将请求消息中的信息以一定的方式转换并绑定到控制器类的方法参数中。这种将请求消息数据与后台方法参数建立连接的过程就是Spring MVC中的数据绑定。 Spring MVC是怎样完成的数据绑定? 在数据绑定过程中,Spring MVC框架会通过数据绑定组件(DataBinder)将请求参数串的内容进行类型转换,然后将转换后的值赋给控制器类中方法的形参,这样后台方法就可以正确绑定并获取客户端请求携带的参数了。 数据绑定

zag666的博客 1437

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Spring MVC系统学习(三)——数据绑定和响应

数据绑定指的是将HTTP请求中的参数自动映射到Java对象中,Spring MVC会根据参数名称和对象字段名进行匹配并完成赋值操作。它通过等注解来获取请求数据,Spring MVC会自动进行类型转换。对于自定义类型,Spring提供了类型转换器(Converter)接口。你可以创建自己的类型转换器来将请求中的字符串转换为复杂的Java对象。@Override@Override通过这种方式,你可以自定义复杂对象的绑定方式。

2301_79858914的博客 1577
上一篇: 异步上传多图片且图片回显到页面的解决方案
下一篇: Mybatis参数绑定没有key时Map和List<Map>的不同
小流至江河
博客等级 码龄9年 223粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值