解决Spring Mvc中接受参数绑定重名的方法

本文介绍了解决HTML表单提交的数据与JavaBean属性映射时出现的字段冲突问题的方法,包括创建中间桥梁对象、使用桥接类以及创建包含多个JavaBean的VO对象等三种方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值