文档章节

SpringMVC 传递相同名称的参数的最佳方法

IamOkay
 IamOkay
发布于 2014/11/13 23:03
字数 798
阅读 13021
收藏 11
点赞 1
评论 3

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

© 著作权归作者所有

共有 人打赏支持
IamOkay
粉丝 187
博文 449
码字总数 367264
作品 0
海淀
程序员
加载中

评论(3)

IamOkay
IamOkay

引用来自“Ronrey”的评论

只能说此楼主还需修炼。
我承认能力有限,但我也会选择一种合适的方式,不足之处可以指出来,用不着这么冷嘲热讽吧
Ronrey
Ronrey
只能说此楼主还需修炼。
foreach
foreach
难道就没有像struts一样简单的吗?
Spring注解(一) @RequestMapping @RequestParam @PathVariable

@RequestMapping 将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上 @RequestParam 从request请求中取值,例如当前请求http://localhost:8080/springMVC/helloworld?a=1&b=2 public String ......

勤奋的蚂蚁 ⋅ 05/06 ⋅ 0

Spring controller

一、简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行...

思悟修 ⋅ 2015/04/07 ⋅ 0

SpringMVC常用注解标签详解

1、@Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的Vie...

Java工程师-Distance ⋅ 05/20 ⋅ 0

说说 Spring Bean 之间的特殊关系

在 Spring 容器中,两个 Bean 之间除了通过 建立依赖关系外,还存在着一些特殊关系。 1 继承 在面向对象的编程原理中,当多个类拥有相同的方法和属性时,则可以引入父类用于消除重复的代码 ...

deniro ⋅ 05/05 ⋅ 0

spring cache实现方法缓存(spring boot + redis)

本文代码示例:https://gitee.com/imlichao/rediscache-example 分析 缓存是分布式系统中的重要组件,主要解决高并发,大数据场景下,热点数据访问的性能问题。提供高性能的数据快速访问。本...

啊哼哼 ⋅ 06/15 ⋅ 0

MyBatis通用dao和通用service

更新于2015/01/29,增加了第三种方法 ##更新于2015/02/09,第三种方法方法改进,service实现上不需要加泛型 概述: 使用通用dao和通用service可以减少代码的开发。可以将常用的增删改查放到通...

孟飞阳 ⋅ 05/17 ⋅ 0

spring MVC中传递的参数对象中包含list的情况!!!!!

测试需要的jar包:spring 3.2.jar + jackson-all-1.8.5.jar。 写代码时碰到个需要将对象里的子明细一起传递到controller里去,当时就想直接将参数一起传递过来,贴下代码: controller: @Req...

yunlielai ⋅ 06/10 ⋅ 0

JAVA学习笔记21——SpingMVC框架第一章

JAVA学习笔记21——SpingMVC框架第一章 Harries Blog™2017-12-210 阅读 ACESpringAppcatapachebeanAOPAction 前面学习了MyBatis的相关知识,今天带大家一起来学习一下关于表现层的另一个框架...

Harries Blog™ ⋅ 2017/12/21 ⋅ 0

Spring-data-commons(CVE-2018-1273)漏洞分析

  前言   CVE-2018-1273 是 Spring-data-commons近期爆出的一个可远程执行代码的漏洞,为了了解更多细节,本文将从漏洞的成因,漏洞的判定以及漏洞的利用三个方面来进行详细说明。   漏...

FreeBuf ⋅ 06/01 ⋅ 0

SpringMVC知识梳理(一)

什么是SpringMVC SpringMVC其实就是spring框架的一个模块,SpringMVC和spring之间可以无缝整合,SpringMVC也是一个非常优秀的基于MVC的web框架,什么是MVC这里就不多说了,下面来了解一下spr...

iHuawen ⋅ 2017/12/28 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

设计模式--装饰者模式

装饰者模式 定义 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。 通用类图 意图 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比...

gaob2001 ⋅ 56分钟前 ⋅ 0

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

马氏距离与欧氏距离

马氏距离 马氏距离也可以定义为两个服从同一分布并且其协方差矩阵为Σ的随机变量之间的差异程度。 如果协方差矩阵为单位矩阵,那么马氏距离就简化为欧氏距离,如果协方差矩阵为对角阵,则其也...

漫步当下 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部