解决Spring Mvc中对象绑定参数重名的问题

html页面

<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=‘age‘>
     <input type=‘text‘ name=‘price‘>
</form>

实体类

public class User{
   private String name;
   private String id;
   private Integer age;
   //getter 和setter
}
----------------------------------
public class Food{
   private String name;
   private String id;
   private Double price,
   //getter 和setter
}

controller

@requestMap(value={‘/order/book‘})
public string show(User u,Food f){}

在上述情况下User 和food都不能得到正确的name和id,或者说更本得不到

1.建立一个中间桥梁, 拆分有所的属性

建立一个中间桥梁UserFoodDto对象

public class UserFoodDto{
  private String uid; //用户id
  private String uname; //用户名
  private String fid; //食物id
  private String fname; //食物名称
  private Double price, //食物价格
  private Integer age; //用户年龄   
  //getter 和setter
}

修改前台页面的 name值

<form method=‘post‘ action=‘url‘>
  用户id <input type=‘text‘ name=‘uid‘>
  用户名 <input type=‘text‘ name=‘uname‘>
  食品id <input type=‘text‘ name=‘fid‘>
  食品名 <input type=‘text‘ name=‘fname‘>
  <input type=‘text‘ name=‘age‘>
  <input type=‘text‘ name=‘price‘>
</form>

controller

@requestMapping(value={‘/order/book‘})
public string show(UserFoodDto dto){
  //创建用户和食物实例
  User u = new User();
  Food f = new Food();
   //分别设置属性
  u.setUid(dto.getUid());
  f.setFid(dto.getFid());
  u.setName(dto.getUname());
  f.setName(dto.getFname());

  u.setAge(dto.getAge);
  f.setPrice(dto.getPrice);
  .....
}

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

2.使用桥连接,拆分冲突的属性

前端页面

<form method=‘post‘ action=‘url‘>
  用户名 <input type=‘text‘ name=‘uname‘>
  用户id <input type=‘text‘ name=‘uid‘>
  食品名 <input type=‘text‘ name=‘fname‘>
  食品id <input type=‘text‘ name=‘fid‘>
  <input type=‘text‘ name=‘age‘>
  <input type=‘text‘ name=‘price‘>
</form>

中间桥梁类

---将冲突的字段专门建立一个javaBean
public Class UFBridge{
  private String uname;
  private String uid;
  private String fname;
  private String fid;
}

controller

@requestMapping(value={‘/order/book‘})
public string show(User u,Food f,UFBridge ufb){
  u.setId(ufb.getUid);
  u.setName(ufb.getUname());

  f.setId(ufb.getFid);
  f.setName(ufb.getUname());}

3.创建一个类包含User和Food

vo对象

public class UserFoodVo{
  private User user;
  private Food food;
  //省略getter和setter方法
}

前台页面

<form method=‘post‘ action=‘url‘>
  用户名 <input type=‘text‘ name=‘user.name‘>
  用户id <input type=‘text‘ name=‘user.id‘>
  食品名 <input type=‘text‘ name=‘food.name‘>
  食品id <input type=‘text‘ name=‘food.id‘>
  <input type=‘text‘ name=‘user.age‘>
  <input type=‘text‘ name=‘food.price‘>
</form>

controller

@requestMapping(value={‘/order/book‘})
public string show(UserFoodVo vo){}

原文地址:https://www.cnblogs.com/guo-rong/p/9464014.html

时间: 2024-10-09 15:29:24

解决Spring Mvc中对象绑定参数重名的问题的相关文章

彻底解决Spring mvc中时间的转换和序列化等问题

痛点 在使用Spring mvc 进行开发时我们经常遇到前端传来的某种格式的时间字符串无法用java8的新特性java.time包下的具体类型参数来直接接收. 我们使用含有java.time封装类型的参数接收也会报反序列化问题,在返回前端带时间类型的同样会出现一些格式化的问题.今天我们来彻底解决他们. 建议 其实最科学的建议统一使用时间戳来代表时间.这个是最完美的,避免了前端浏览器的兼容性问题,同时也避免了其它一些中间件的序列化/反序列化问题.但是用时间表达可能更清晰语义化.两种方式各有千秋,如

Spring MVC 使用矩阵变量绑定参数

RFC3986 定义了在 URI 中包含 name-value 的规范.随之在 Spring MVC 3.2 中出现了 @MatrixVariable 注解,该注解的出现使得开发人员能够将请求中的矩阵变量(MatrixVariable)绑定到处理器的方法参数中.而 Spring 4.0 更全面地支持这个规范,这也是 Spring 4.0 众多吸引人的新特性之一.接下来我们就一起来了解这个新特性的使用方式. 在 Matrix Variable 中,多个变量可以使用 “;”(分号)分隔,例如: /b

【转】解决spring mvc 中ajax返回json乱码问题

转载自:http://my.oschina.net/u/140421/blog/176625 转载自:http://my.oschina.net/candon/blog/149073?fromerr=I9VBOy62 第一个转载: 在使用spring-mvc的mvc的时候既享受它带来的便捷,又头痛它的一些问题,比如经典的中文乱码问题.现在是用json作为客户端和服务端 的数据交换格式貌似很流行,但是在springmvc中有时候会因为我们的各种疏忽从而造成页面ajax请求到的相应数据,如果带有中文

spring -mvc 将对象封装json返回时删除掉对象中的属性注解方式

spring -mvc 将对象封装json返回时删除掉对象中的属性注解方式 在类名,接口头上注解使用在 @JsonIgnoreProperties(value={"comid"}) //希望动态过滤掉的属性 例 @JsonIgnoreProperties(value={"comid"}) public interface 接口名称{ } @JsonIgnoreProperties(value={"comid"}) public class 类名{

Spring MVC中基于注解的 Controller

终于来到了基于注解的 Spring MVC 了.之前我们所讲到的 handler,需要根据 url 并通过 HandlerMapping 来映射出相应的 handler 并调用相应的方法以响应请求.实际上,ControllerClassNameHandlerMapping, MultiActionController 和选择恰当的 methodNameResolver(如 InternalPathMethodNameResolver) 就已经可以在很大程度上帮助我们省去不少的 XML 配置,谁让

Spring MVC 中的基于注解的 Controller【转】

原文地址:http://my.oschina.net/abian/blog/128028 终于来到了基于注解的 Spring MVC 了.之前我们所讲到的 handler,需要根据 url 并通过 HandlerMapping 来映射出相应的 handler 并调用相应的方法以响应请求.实际上,ControllerClassNameHandlerMapping, MultiActionController 和选择恰当的 methodNameResolver(如 InternalPathMetho

Spring MVC 中的基于注解的 Controller(转载)

  终于来到了基于注解的 Spring MVC 了.之前我们所讲到的 handler,需要根据 url 并通过 HandlerMapping 来映射出相应的 handler 并调用相应的方法以响应请求.实际上,ControllerClassNameHandlerMapping, MultiActionController 和选择恰当的 methodNameResolver(如 InternalPathMethodNameResolver) 就已经可以在很大程度上帮助我们省去不少的 XML 配置,

spring mvc 如何传递集合参数(list,数组)

spring mvc 可以自动的帮你封装参数成为对象,不用自己手动的通过request一个一个的获取参数,但是这样自动的参数封装碰碰到了集合参数可能就需要点小技巧才可以了. 一.基础类型和引用类型有什么区别? 基础类型是直接保存在堆栈上面的,引用类型(对象)值保存在堆上面,地址保存在栈上面的,基础类型都有非null的默认值,比如int默认是0,boolean默认是false,引用类型除非是用new开辟出新的空间,否则只有地址信息没有值信息.int 和 integer的区别不仅是有没有默认值的问题

在Spring MVC中使用Apache Shiro安全框架

我们在这里将对一个集成了Spring MVC+Hibernate+Apache Shiro的项目进行了一个简单说明.这个项目将展示如何在Spring MVC 中使用Apache Shiro来构建我们的安全框架. [TOC] 阅读文章前,您需要做以下准备: Maven 3环境Mysql-5.6+JDK1.7+git环境git.oschina.net帐号Apache Tomcat 7+您熟练掌握的编辑工具,推荐使用InterlliJ IDEA 14+开始项目地址git.oschina.net 项目地