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. vue2.0-elementUI

    main.js import Vue from 'vue' import App from './App.vue' import ElementUI from 'element-ui' import ...

  2. javascript 左侧菜单

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. POJ 3184 DP+剪枝

    思路: 先找到每i头奶牛能在的位置 (一段区间) 记为L[i]和R[i] f[j]表示在位置j取到的最小值 每回在范围内更新一哈 //By SiriusRen #include <cstdio& ...

  4. matlab中plot画图参数的设置

    原文链接:http://blog.sciencenet.cn/blog-281551-573856.html 一.Matlab绘图中用到的直线属性包括: (1)LineStyle:线形 (2)Line ...

  5. [Chromium文档转载,第002章]Mojo C++ Bindings API

    Mojo C++ Bindings API This document is a subset of the Mojo documentation. Contents Overview Getting ...

  6. UVA 12649 Folding Machine 搜索

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  7. scrapy框架设置代理

    网易音乐在单ip请求下经常会遇到网页返回码503的情况经查询,503为单个ip请求流量超限,猜测是网易音乐的一种反扒方式因原音乐下载程序采用scrapy框架,所以需要在scrapy中通过代理的方式去解 ...

  8. Svn备份与Bandizip压缩批处理程序

    目的:为了定时备份多个svn仓库数据,使用批处理程序进行备份并Bandizip进行压缩保存到指定位置,操作完成后弹出成功提示. 为了完成以上目标,需要了解以下几个方面: 批处理命令 Svn命令 Ban ...

  9. 【TC SRM 718 DIV 2 A】RelativeHeights

    [Link]: [Description] 给你n个数字组成原数列; 然后,让你生成n个新的数列a 其中第i个数列ai为删掉原数列中第i个数字后剩余的数字组成的数列; 然后问你这n个数列组成的排序数组 ...

  10. CCF模拟题 最优灌溉

    最优灌溉 时间限制: 1.0s 内存限制: 256.0MB   问题描述 雷雷承包了很多片麦田,为了灌溉这些麦田,雷雷在第一个麦田挖了一口很深的水井,所有的麦田都从这口井来引水灌溉. 为了灌溉,雷雷需 ...