SpringMVC 多个对象的相同字段参数传递解决方案,在SpringMVC中,有时需要传递多个对象(除了Model和web元素)

众所周知,在SpringMVC中不支持类似struts2的点语法传参法则,因此多个对象同名参数传递势必会造成一定的问题。

  1. SpringMVC的参数传递非常智能,可自动装配参数到对象

public class User{
 private String name;
 private String id;
 private String gender,
 private String age;
  //getter 和setter
}
----------------------------------
public class Food{
 private String name;
 private String id;
 private String price,
 private String date;
 //getter 和setter
}
-------
<form method='post' action='url'>
用户名 <input type='text' name='name'>
用户id <input type='text' name='id'>
食品名 <input type='text' name='name'>
食品id <input type='text' name='id'>
 <input type='text' name='gender'>
 <input type='text' name='age'>
 <input type='text' name='price'>
 <input type='text' name='date'>
</form>
@requestMap(value={'/order/book'})

public string show(User u,Food f){}

在上述情况下User 和food都不能得到正确的name和id,或者说更本得不到,这要是struts2就方便多了,直接使用点语法 u.name,u.id,f.name,f.id....

为了解决上述问题,有2中方案:

1.是建立一个DTO

优点是可以认为的避免参数的传递,直接改dto的字段名 u_name,u_id,f_name,f_id,gender,age,date,price都要列出来,然后作如下操作

然后修改表单字段和contoller

<form method='post' action='url'>
用户名 <input type='text' name='u_name'>
用户id <input type='text' name='u_id'>
食品名 <input type='text' name='f_name'>
食品id <input type='text' name='f_id'>
 <input type='text' name='gender'>
 <input type='text' name='age'>
 <input type='text' name='price'>
 <input type='text' name='date'>
</form> @requestMap(value={'/order/book'})

public string show(UserFoodDto dto){

//然后拆分,将字段

User u = new User();

Food f = new Food(); u.setName(dto.getUname());

f.setName(dto.getname()); u.setUid(dto.getUid());

f.setFid(dto.getFid()); u.setAge(dto.getAge);

f.setPrice(dto.getPrice);

.....

}

缺点是:如果数据量大,100百个字段,修改的地方自然越多,而且一个dto,拆分也很费力,因此不建议使用在数据量大的情况下

2.使用桥连接,将不同的部分专门封装成一个对象(推荐)

优点:减少了冲突,减少了工作量

缺点:冲突字段/总字段趋近于1时显得没必要(不过,这种情况几乎很少出现,除非是继承关系,但继承关系完全可以使用子类来传值,所以这个问题你就当没遇到过)

表单如下

<form method='post' action='url'>
用户名 <input type='text' name='u_name'>
用户id <input type='text' name='u_id'>
食品名 <input type='text' name='f_name'>
食品id <input type='text' name='f_id'>
 <input type='text' name='gender'>
 <input type='text' name='age'>
 <input type='text' name='price'>
 <input type='text' name='date'>
</form>

-----将冲突的字段专门建立一个javaBean

public String UFBridge{

    

    private String uname;

    private String uid;

    private String fname;

    private String fid;

}

@requestMap(value={'/order/book'})

public string show(User u,Food f,UFBridge ufb){    u.setName(ufb.getUname());

   f.setName(ufb.getUname());

   

   u.setId(ufb.getUid);

   f.setId(ufb.getFid);

}

3.使用相应的注解@InitBinder,可以做出类似struts2的方案(不推荐,代码量增加,灵活度不够)

如下博文

SpringMVC同名参数绑定问题

springmvc注解形式的开发参数接收

try doing it


SpringMVC 传递相同名称的参数的最佳方法的更多相关文章

  1. springmvc 传递和接收数组参数

    java url中如何传递数组,springMVC框架controller类如何接收数组参数? 下面介绍一下URL中传递数组参数方法: dd.do?titles[]=col1&titles[] ...

  2. shell脚本传递带有空格的参数的解决方法

    如下例子所示: #!/bin/sh dt= rdms_presql='select * from dm_general_stat where dimcode = "day" and ...

  3. SpringMVC札集(04)——SpringMVC传递参数

    自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程03–onL ...

  4. paip.log4j 日志系统 参数以及最佳实践

    paip.log4j 日志系统 参数以及最佳实践   %d{yyyy-MM-dd HH:mm:ss} [thrd:%t] %5p   loger:%c   (%C.%M.%L)  - %m%n 201 ...

  5. springmvc后台接前端的参数,数组,集合,复杂对象等

    springmvc后台接前端的参数,数组,集合,复杂对象等 参考地址:https://blog.csdn.net/feicongcong/article/details/54705933  常用的几种 ...

  6. SpringMVC传递JSON数据

    文章目录 一.前后端传递和接收JSON数据 1:是要Ajax默认格式来传递数据(*) 2:使用application/json格式来传递数据 二.spring-web.xml中需要如下配置 一.前后端 ...

  7. Java容器化参数配置最佳实践

    Java是以VM为基础的,而云原生讲究的就是Native,天然的矛盾,虽然Quarkus是为GraalVM和HotSpot量身定制的K8s Native Java框架,生态原因切换成本太高,这种矛盾体 ...

  8. python 函数传递参数的多种方法

    python中函数根据是否有返回值可以分为四种:无参数无返回值,无参数有返回值,有参数无返回值,有参数有返回值. Python中函数传递参数的形式主要有以下五种,分别为位置传递,关键字传递,默认值传递 ...

  9. 关于spring-mvc的InitBinder注解的参数

    关于spring-mvc的InitBinder注解的参数 通过Spring-mvc的@InitBinder注释的方法可以对WebDataBinder做一些初始化操作.比如设置Validator. 我一 ...

随机推荐

  1. vue --- cli build 后的项目,图片路径出错

    今天在插入背景图片过程中,遇到了路径错误的问题,通过网上查询,找到了解决的办法,但是大部分都没有讲造成这种问题的原因,故我简单地总结了一下,并加入了一些自己的理解,欢迎共同探讨~ 当用vue-cli自 ...

  2. jquery中prop()方法和attr()方法

    接着上一篇笔记的疑惑,找了下prop()方法和attr()方法的区别. 原来query1.6中新加了一个方法prop(),一直没用过它,官方解释只有一句话:获取在匹配的元素集中的第一个元素的属性值. ...

  3. SQL函数-str()

    1 str()函数用于将数值类型数据转换未字符类型. 2 str()函数语法 select str(数字类型的表达式[,表达式总长度][,小数点后面的位数]) 表达式总长度和小数点后面的位数为可选择参 ...

  4. NOIP愤怒的小鸟

    愤怒的小鸟 Description: 给你\(n<=18\)个小猪,发射的小鸟轨迹为抛物线,求最小用多少个小鸟可以将小猪全部干掉 看到n很小,我想到了搜索,于是我用\(dfs\)枚举出,每个抛物 ...

  5. 重装python 和 yum

    https://blog.csdn.net/ghostyusheng/article/details/https://segmentfault.com/q/1010000009194060/a-102 ...

  6. 紫书 例题 9-14 UVa 1218 (树形dp)

    这道题有个初始值设成1e9, 然后这个值是要加很多次的,然后就会溢出变成负数, 然后就一直WA, 找这个bug找了一个小时--以后不能随便这样设那么大, 要考虑会不会加很多次然后溢出. 讲一下思路. ...

  7. AI:OPENCV实现人脸的自动识别

    依赖jar包: faceRecognition.java package opencv; import java.awt.Graphics; import java.awt.image.Buffere ...

  8. flex RemoteObject 的两种使用方法

    这里使用的是django1.6 和 postgreSQL9.0  FlashBuilder4.5 django方面就不说了,根据文档来做,建好模块,配置好数据库等等 创建 gateway 和 time ...

  9. IT运维分析

    http://www.infoq.com/cn/presentations/case-of-it-operation-analysis-and-log-search-analysis-engine?u ...

  10. MySpring dataSource从配置文件获取

    大神就不看了.本篇是一个人笔记. 原来的数据库配置文件是写死的. 看代码:Mybatis的配置文件 <bean id="dataSource" class="org ...