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

 2023-09-13 阅读 22 评论 0

摘要:华为云4核8G,高性能云服务器,免费试用 >>> 如何快速对相同名称内容进行,SpringMVC 多个对象的相同字段参数传递解决方案,在SpringMVC中,有时需要传递多个对象(除了Model和web元素) 众所周知,在SpringMVC中不支持

华为云4核8G,高性能云服务器,免费试用 >>>   hot3.png

如何快速对相同名称内容进行,SpringMVC 多个对象的相同字段参数传递解决方案,在SpringMVC中,有时需要传递多个对象(除了Model和web元素)

众所周知,在SpringMVC中不支持类似struts2的点语法传参法则,因此多个对象同名参数传递势必会造成一定的问题。

java对象作为参数传递?

  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

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/50514.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息