SpringMVC 传递相同名称的参数的最佳方法
SpringMVC 多个对象的相同字段参数传递解决方案,在SpringMVC中,有时需要传递多个对象(除了Model和web元素)
众所周知,在SpringMVC中不支持类似struts2的点语法传参法则,因此多个对象同名参数传递势必会造成一定的问题。
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的方案(不推荐,代码量增加,灵活度不够)
如下博文
try doing it
SpringMVC 传递相同名称的参数的最佳方法的更多相关文章
- springmvc 传递和接收数组参数
java url中如何传递数组,springMVC框架controller类如何接收数组参数? 下面介绍一下URL中传递数组参数方法: dd.do?titles[]=col1&titles[] ...
- shell脚本传递带有空格的参数的解决方法
如下例子所示: #!/bin/sh dt= rdms_presql='select * from dm_general_stat where dimcode = "day" and ...
- SpringMVC札集(04)——SpringMVC传递参数
自定义View系列教程00–推翻自己和过往,重学自定义View 自定义View系列教程01–常用工具介绍 自定义View系列教程02–onMeasure源码详尽分析 自定义View系列教程03–onL ...
- paip.log4j 日志系统 参数以及最佳实践
paip.log4j 日志系统 参数以及最佳实践 %d{yyyy-MM-dd HH:mm:ss} [thrd:%t] %5p loger:%c (%C.%M.%L) - %m%n 201 ...
- springmvc后台接前端的参数,数组,集合,复杂对象等
springmvc后台接前端的参数,数组,集合,复杂对象等 参考地址:https://blog.csdn.net/feicongcong/article/details/54705933 常用的几种 ...
- SpringMVC传递JSON数据
文章目录 一.前后端传递和接收JSON数据 1:是要Ajax默认格式来传递数据(*) 2:使用application/json格式来传递数据 二.spring-web.xml中需要如下配置 一.前后端 ...
- Java容器化参数配置最佳实践
Java是以VM为基础的,而云原生讲究的就是Native,天然的矛盾,虽然Quarkus是为GraalVM和HotSpot量身定制的K8s Native Java框架,生态原因切换成本太高,这种矛盾体 ...
- python 函数传递参数的多种方法
python中函数根据是否有返回值可以分为四种:无参数无返回值,无参数有返回值,有参数无返回值,有参数有返回值. Python中函数传递参数的形式主要有以下五种,分别为位置传递,关键字传递,默认值传递 ...
- 关于spring-mvc的InitBinder注解的参数
关于spring-mvc的InitBinder注解的参数 通过Spring-mvc的@InitBinder注释的方法可以对WebDataBinder做一些初始化操作.比如设置Validator. 我一 ...
随机推荐
- vue2.0-elementUI
main.js import Vue from 'vue' import App from './App.vue' import ElementUI from 'element-ui' import ...
- javascript 左侧菜单
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- POJ 3184 DP+剪枝
思路: 先找到每i头奶牛能在的位置 (一段区间) 记为L[i]和R[i] f[j]表示在位置j取到的最小值 每回在范围内更新一哈 //By SiriusRen #include <cstdio& ...
- matlab中plot画图参数的设置
原文链接:http://blog.sciencenet.cn/blog-281551-573856.html 一.Matlab绘图中用到的直线属性包括: (1)LineStyle:线形 (2)Line ...
- [Chromium文档转载,第002章]Mojo C++ Bindings API
Mojo C++ Bindings API This document is a subset of the Mojo documentation. Contents Overview Getting ...
- UVA 12649 Folding Machine 搜索
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- scrapy框架设置代理
网易音乐在单ip请求下经常会遇到网页返回码503的情况经查询,503为单个ip请求流量超限,猜测是网易音乐的一种反扒方式因原音乐下载程序采用scrapy框架,所以需要在scrapy中通过代理的方式去解 ...
- Svn备份与Bandizip压缩批处理程序
目的:为了定时备份多个svn仓库数据,使用批处理程序进行备份并Bandizip进行压缩保存到指定位置,操作完成后弹出成功提示. 为了完成以上目标,需要了解以下几个方面: 批处理命令 Svn命令 Ban ...
- 【TC SRM 718 DIV 2 A】RelativeHeights
[Link]: [Description] 给你n个数字组成原数列; 然后,让你生成n个新的数列a 其中第i个数列ai为删掉原数列中第i个数字后剩余的数字组成的数列; 然后问你这n个数列组成的排序数组 ...
- CCF模拟题 最优灌溉
最优灌溉 时间限制: 1.0s 内存限制: 256.0MB 问题描述 雷雷承包了很多片麦田,为了灌溉这些麦田,雷雷在第一个麦田挖了一口很深的水井,所有的麦田都从这口井来引水灌溉. 为了灌溉,雷雷需 ...