解决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