原:https://blog.csdn.net/u011781521/article/details/77586688/

Spring MVC同时接收一个对象与List集合对象

2017年08月25日 20:52:31

阅读数:13709

故事是这样的,有一个需求是新增病历,一个用户有多个用药方案如下:

在网上找了,几种方案,都不行啊,有关于如何接收对象的,如何接收List的,就是没有同时如何接收一个对象与List,自己写了个能用的方法就是,就是把整个表单全部提交,以数组下表区分是第几个,对象,保存提交代码如下:

http://localhost:8080/GZ/dtcasehistory/addcasehistory?guid=4DF7694521DC7FC1E053AA0012AC45DE&name=ckse&sex=男&birthday=2017-3-6&cardid="123465798&medicalid=36985274&jws=没有既往史&medicalid=36985274&mainn=这是主诉&zhand=这是诊断1,诊断2,诊断3&dts[0].drunam=这是药品1&dts[0].unit=这是规格&dts[0].numnit=123456&dts[0].pian=963&dts[0].pc=33364&dts[0].kfwyname=这是途径0&dts[1].drunam=这是药品2&dts[1].unit="这是规格2&dts[1].numnit=1234561&dts[1].pian=9632&dts[1].pc=333642&dts[1].kfwyname=这是途径1

guid=4DF7694521DC7FC1E053AA0012AC45DE

&name=ckse

&sex=男

&birthday=2017-3-6

&cardid="123465798

&medicalid=36985274

&jws=没有既往史

&medicalid=36985274

&mainn=这是主诉

&zhand=这是诊断1,诊断2,诊断3

&dts[0].drunam=这是药品1

&dts[0].unit=这是规格

&dts[0].numnit=123456

&dts[0].pian=963

&dts[0].pc=33364

&dts[0].kfwyname=这是途径0

&dts[1].drunam=这是药品2

&dts[1].unit="这是规格2

&dts[1].numnit=1234561

&dts[1].pian=9632

&dts[1].pc=333642

&dts[1].kfwyname=这是途径1

写好之后,交给前端,遇到一个很尴尬的地方就是,他问我怎么提交这个数据?????,说很难实现,以JS的形式,我当时傻逼了。。。觉得是有点麻烦。。下班之后,在地铁上一想。。。这他妈还不简单。。。一个表单就提交了。。。

具体代码如下:

实体类如下:

病历只有一个:

  1. /**
  2. * @version V1.0
  3. * @Author fendo
  4. * @ClassName DTsickblhdrRequest
  5. * @PackageName com.gz.medicine.yun.doctor.request
  6. * @Description 病历请求数据
  7. * @Data 2017-08-18 14:17
  8. **/
  9. public class DTsickblhdrRequest implements Serializable {
  10.  
  11.  
  12. //患者ID
  13. @NotEmpty(message = "患者guid不能为空!")
  14. private String guid;
  15.  
  16. //1、患者姓名
  17. @NotEmpty(message="患者姓名name不能为空!")
  18. private String name;
  19. //2、性别
  20. @NotEmpty(message="性别sex不能为空!")
  21. private String sex;
  22. //3、出生年月
  23. @NotEmpty(message="出生年月birthday不能为空!")
  24. private String birthday;
  25. //4、医保卡号
  26. @NotEmpty(message="医保卡号cardid不能为空!")
  27. private String cardid;
  28. //5、就诊卡号
  29. @NotEmpty(message="就诊卡号medicalid不能为空!")
  30. private String medicalid;
  31.  
  32. //6、主诉
  33. @NotEmpty(message="主诉mainn不能为空!")
  34. private String mainn;
  35.  
  36. //7、既往史
  37. @NotEmpty(message="既往史jws不能为空!")
  38. private String jws;
  39.  
  40. //8、诊断
  41. @NotEmpty(message="诊断zhand不能为空!")
  42. private String zhand;
  43.  
  44. .......
  45.  
  46. }

用药方案有多个,用个List来装:

  1. /**
  2. * @version V1.0
  3. * @Author fendo
  4. * @ClassName DTsickbldtlRequestList
  5. * @PackageName com.gz.medicine.yun.doctor.request
  6. * @Description 用药方案请求List数据封装
  7. * @Data 2017-08-19 14:21
  8. **/
  9. public class DTsickbldtlRequestList implements Serializable {
  10.  
  11. private List<DTsickbldtlRequest> dts;
  12.  
  13.  
  14. public List<DTsickbldtlRequest> getDts() {
  15. return dts;
  16. }
  17.  
  18. public void setDts(List<DTsickbldtlRequest> dts) {
  19. this.dts = dts;
  20. }
  21.  
  22. public DTsickbldtlRequestList() {
  23. }
  24. }

Controller如下:

  1. /**
  2. *
  3. *@Title AddCaseHistory
  4. *@Description: 新增患者病历
  5. *@Author fendo
  6. *@Date 2017年8月17日 上午10:52
  7. *@param dTsickblhdrRequest,dTsickblhdrRequest
  8. *@return int
  9. *@throws
  10. */
  11. @RequestMapping(value = "addcasehistory",method = RequestMethod.POST,produces="text/html;charset=UTF-8")
  12. @ResponseBody
  13. public SimpleResult AddCaseHistory(DTsickblhdrRequest dTsickblhdrRequest,DTsickbldtlRequestList dTsickbldtlRequestList){
  14. SimpleResult simpleResult=null;
  15. try{
  16. if(validates(validator, dTsickblhdrRequest)!=null){
  17. return SimpleResult.error(SimpleCode.ERROR.getCode(), validates(validator, dTsickblhdrRequest));
  18. }
  19.  
  20. if(dTsickbldtlRequestList.getDts()!=null){
  21. for (int j=0;j<dTsickbldtlRequestList.getDts().size();j++){
  22. DTsickbldtlRequest dTsickbldtlRequest=dTsickbldtlRequestList.getDts().get(j);
  23. if(validates(validator, dTsickbldtlRequest)!=null){
  24. return SimpleResult.error(SimpleCode.ERROR.getCode(), validates(validator, dTsickbldtlRequest));
  25. }
  26. }
  27. }
  28. simpleResult=dtCaseHistoryService.addMedicalRecords(dTsickbldtlRequestList,dTsickblhdrRequest);
  29. return simpleResult;
  30. }catch (CommonException e){
  31. LOGGER.error(e);
  32. return SimpleResult.error(SimpleCode.ERROR.getCode(), e.getDesc());
  33. }
  34.  
  35.  
  36. }

页面如下:

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4. <title>Title</title>
  5. <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
  6. </head>
  7. <body>
  8.  
  9. <form action="" method="post" id="formdata">
  10. ID: <input type="text" id="guid" name="guid" value="4DF7694521DC7FC1E053AA0012AC45DE" placeholder="4DF7694521DC7FC1E053AA0012AC45DE"/> <br>
  11. 姓名: <input type="text" id="name" name="name" value="ckse" placeholder="ckse"/> <br>
  12. 性别: <input type="text" id="sex" name="sex" value="男" placeholder="男"/> <br>
  13. 出生日期: <input type="text" id="birthday" name="birthday" value="2017-3-6" placeholder="2017-3-6"/> <br>
  14. 医保卡号: <input type="text" id="cardid" name="cardid" value="2017-3-6" placeholder="2017-3-6"/> <br>
  15. 就诊卡号: <input type="text" id="medicalid" name="medicalid" value="36985274" placeholder="36985274"/> <br>
  16. 主诉: <input type="text" id="mainn" name="mainn" value="这是主诉" placeholder="这是主诉"/> <br>
  17. 既往史: <input type="text" id="jws" name="jws" value="没有既往史" placeholder="没有既往史"/> <br>
  18. 诊断: <input t ype="text" id="zhand" name="zhand" value="这是诊断1,诊断2,诊断3" placeholder="这是诊断1,诊断2,诊断3"/> <br>
  19.  
  20. 用药方案:<br>
  21. <hr>
  22. 方案1------------------<br>
  23. 药品名: <input type="text" id="dts[0].drunam" name="dts[0].drunam" value="这是药品1" placeholder="这是药品1"/><br>
  24. 规格: <input type="text" id="dts[0].unit" name="dts[0].unit" value="这是规格" placeholder="这是规格"/><br>
  25. 数量: <input type="text" id="dts[0].numnit" name="dts[0].numnit" value="123456" placeholder="123456"/><br>
  26. 剂量: <input type="text" id="dts[0].pian" name="dts[0].pian" value="963" placeholder="963"/><br>
  27. 频次: <input type="text" id="dts[0].pc" name="dts[0].pc" value="33364" placeholder="33364"/><br>
  28. 途径: <input type="text" id="dts[0].kfwyname" name="dts[0].kfwyname" value="这是途径0" placeholder="这是途径0"/><br>
  29.  
  30.  
  31. 方案2------------------<br>
  32. 药品名: <input type="text" id="dts[1].drunam" name="dts[1].drunam" value="这是药品1" placeholder="这是药品1"/><br>
  33. 规格: <input type="text" id="dts[1].unit" name="dts[1].unit" value="这是规格" placeholder="这是规格"/><br>
  34. 数量: <input type="text" id="dts[1].numnit" name="dts[1].numnit" value="123456" placeholder="123456"/><br>
  35. 剂量: <input type="text" id="dts[1].pian" name="dts[1].pian" value="963" placeholder="963"/><br>
  36. 频次: <input type="text" id="dts[1].pc" name="dts[1].pc" value="33364" placeholder="33364"/><br>
  37. 途径: <input type="text" id="dts[1].kfwyname" name="dts[1].kfwyname" value="这是途径0" placeholder="这是途径0"/><br>
  38.  
  39. <hr>
  40. <input id="submit" value="提交" type="button">
  41.  
  42. </form>
  43.  
  44. <script>
  45.  
  46. $(function () {
  47.  
  48. $("#submit").click(function () {
  49. $.ajax({
  50. url: "<%=request.getContextPath()%>/dtcasehistory/addcasehistory",
  51. type: "POST",
  52. dataType:"json",
  53. data: $("#formdata").serialize() ,
  54. success: function(data){
  55. alert(data);
  56. },
  57. error: function(res){
  58. alert(res.responseText);
  59. }
  60. });
  61. })
  62.  
  63. })
  64.  
  65. </script>
  66.  
  67. </body>
  68. </html>

页面效果如下:

打开调试,请求的参数如下:

这不就解决了。。。。。。。。。

----------------------------------后续-------------------------------------

还有种方法就是,全部以JSON的形式往后台传:

  1. localhost:8996/GZ/dtcasehistory/adds?model={
  2. "guid": "123",
  3. "name": "234",
  4. "sex": "男",
  5. "birthday":"2017-3-6",
  6. "cardid":"123465798",
  7. "medicalid":"36985274",
  8. "mainn":"这是主诉",
  9. "jws":"没有既往史",
  10. "zhand":"这是诊断1,诊断2,诊断3",
  11. "dts": [{
  12. "drunam": "药品名0",
  13. "unit": "规格0",
  14. "numnit": "数量0",
  15. "pian":"剂量0",
  16. "pc":"频次0",
  17. "kfwyname":"途径0"
  18. },{
  19. "drunam": "药品名1",
  20. "unit": "规格1",
  21. "numnit": "数量1",
  22. "pian":"剂量1",
  23. "pc":"频次1",
  24. "kfwyname":"途径1"
  25. }]
  26. }

前端代码:

  1. $("#suv").click(function () {
  2.  
  3. var mode={"guid": "123", "name": "234","sex": "男","birthday":"2017-3-6","cardid":"123465798","medicalid":"36985274","mainn":"这是主诉","jws":"没有既往史", "zhand":"这是诊断1,诊断2,诊断3", "dts": [{"drunam": "药品名0", "unit": "规格0", "numnit": "数量0", "pian":"剂量0", "pc":"频次0", "kfwyname":"途径0"},{"drunam": "药品名1", "unit": "规格1", "numnit": "数量1", "pian":"剂量1", "pc":"频次1", "kfwyname":"途径1"}]};
  4.  
  5. var ddd = encodeURI(JSON.stringify(mode));
  6.  
  7. $.ajax({
  8. url: "<%=request.getContextPath()%>/dtcasehistory/adds",
  9. type: "POST",
  10. dataType:"json",
  11. data:"model="+ddd,
  12. success: function(data){
  13. alert(data);
  14. },
  15. error: function(res){
  16. alert(res.responseText);
  17. }
  18. });
  19. })

注意:JSON放在model里面,所以,在后台通过可以request.getParameter("model")来获取这个数据,然后通过json-lib来解析就行了,具体代码如下:

  1. @RequestMapping(value = "adds",method = RequestMethod.POST,produces="text/html;charset=UTF-8")
  2. @ResponseBody
  3. public SimpleResult adds(HttpServletRequest request, HttpServletResponse response){
  4. SimpleResult simpleResult=null;
  5.  
  6. String str = null;
  7. try {
  8. //解码,为了解决中文乱码
  9. str = URLDecoder.decode(request.getParameter("model"),"UTF-8");
  10. System.out.println("----------------str"+str);
  11. JSONObject jb=new JSONObject();
  12. //将json格式的字符串转换为json数组对象
  13. JSONArray array=(JSONArray)jb.fromObject(str).get("dts");
  14.  
  15. //取得json数组中的第一个对象
  16. JSONObject o = (JSONObject) array.get(0);//获得第一个array结果
  17. System.out.println("数组大小:"+array.size());
  18. //取出json数组中第一个对象的“userName”属性值
  19. String name=o.get("drunam").toString();//获得属性值
  20. System.out.println(name);
  21. System.out.println(o);
  22. } catch (Exception e) {
  23. e.printStackTrace();
  24. }
  25.  
  26.  
  27. simpleResult=SimpleResult.success();
  28. return simpleResult;
  29. }

后端输出如下:

注意: 这里引入了json-lib,使用的是json-lib来解析JSON,因为其中有个将json格式的字符串转换为json数组对象的方法,maven依赖如下

  1. <dependency>
  2. <groupId>net.sf.json-lib</groupId>
  3. <artifactId>json-lib</artifactId>
  4. <version>2.4</version>
  5. <classifier>jdk15</classifier>
  6. </dependency>

还有方法就是扩展SpringMVC以支持绑定JSON格式的请求参数,具体可参考这:http://jinnianshilongnian.iteye.com/blog/1719952

Spring MVC同时接收一个对象与List集合对象的更多相关文章

  1. spring MVC 如何接收前台传入的JSON对象数组并处理

    spring MVC 如何接收前台传入的JSON对象数组 主要方法: (主要用到的包是 net.sf.json  即:json-lib-2.3-jdk15.jar 完整相关jar包: commons- ...

  2. spring MVC 如何接收前台传入的JSON对象数组

    spring MVC 如何接收前台传入的JSON对象数组 主要方法: (主要用到的包是 net.sf.json  即:json-lib-2.3-jdk15.jar 完整相关jar包: commons- ...

  3. Spring MVC在接收复杂集合参数

    Spring MVC在接收集合请求参数时,需要在Controller方法的集合参数里前添加@RequestBody,而@RequestBody默认接收的enctype (MIME编码)是applica ...

  4. Spring MVC如何接收浏览器传递来的请求参数--request--形参--实体类封装

    阅读目录 1. 通过HttpServletRequest获得请求参数和数据 2. 处理方法形参名==请求参数名 3. 如果形参名跟请求参数名不一样怎么办呢?用@RequestParam注解 4. 用实 ...

  5. 0056 Spring MVC如何接收浏览器传递来的请求参数--request--形参--实体类封装

    浏览器总会向服务器传递一些参数,那么Spring MVC如何接收这些参数? 先写个简单的html,向服务器传递一些书籍信息,如下: <!DOCTYPE html> <html> ...

  6. 解决Spring MVC无法接收AJAX使用PUT与DELETE请求传输的内容

    解决Spring MVC无法接收AJAX使用PUT与DELETE请求传输的内容 解决方案 在 Web.xml文件中 加入以下代码 <!--解决ajax Put与Del请求无法接收到传输的内容-- ...

  7. spring mvc get请求也可以接受DTO对象

    spring mvc get请求也可以接受DTO对象,比如:url上面你还是将参数&符号连接起来,并自动封装进一个DTO对象里. 只有@RequestBody注解spring mvc才会从ht ...

  8. spring mvc controller接收请求值及controller之间跳转及传值

    spring接收请求参数: 1,使用HttpServletRequest获取 @RequestMapping("/login.do") public String login(Ht ...

  9. MQTT 4 ——MQTT的Spring Mvc 配置接收字节流数据

    本篇记录一下MQTT整合Spring Mvc配置直接收发字节流数据 设备方是纯C开发,并且为了交互数据的安全,将传送的数据用了AES CBC进行了加密. 接下来正常方便做法应该是 将加密后的字节流转换 ...

随机推荐

  1. 4星|《亿万》:FBI大战华尔街对冲基金大鳄

    亿万:围剿华尔街大白鲨 全书尝试还原2008-2013年前后FBI指控赛克资本老板科恩通过内幕交易盈利的案件细节. 作者花了数年时间,采访了200多位当事人,阅读了海量的相关资料.书中交代了科恩的发家 ...

  2. 亚马逊6月18日发布惊世之作 或为3D智能手机

    亚马逊将在 6 月 18 日举行一个产品发布会. 其内容可能是关于传闻已久的亚马逊智能手机.该公司在 YouTube 上公布了一段炫耀这款设备的视频.这段视频展示了很多人在这款产品前摇头晃脑,并且表现 ...

  3. 作业要求20181113-4 Beta阶段第1周/共2周 Scrum立会报告+燃尽图 03

    作业要求:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2385 版本控制:[https://git.coding.net/lglr201 ...

  4. 按照Right-BICEP要求设计的测试用例

    测试用例: 测试方法:Right-BICEP 测试要求: Right-结果是否正确? B-是否所有的边界条件都是正确的? P-是否满足性能要求? 题目是否有重复? 数量是否可定制? 数值范围是否可定制 ...

  5. 论文爬取 & 词频统计2.0

    一.Github地址      课程项目要求    队友博客 二.具体分工 031602225 林煌伟 :负责C++部分主要功能函数的编写,算法的设计以及改进优化 031602230 卢恺翔 : 爬虫 ...

  6. POJ 2392 Space Elevator 贪心+dp

    题目链接: http://poj.org/problem?id=2392 题意: 给你k类方块,每类方块ci个,每类方块的高度为hi,现在要报所有的方块叠在一起,每类方块的任何一个部分都不能出现在ai ...

  7. 使用git提交代码的一些小心得

    1.不进行push不能运行的代码,如果需要提交,可以先注释,保证其他人pull时,可以得到能够正常使用的代码 2.每做完一件事,写一条描述,一次提交.不要等写了一堆代码,然后写一堆描述,这样如果需要查 ...

  8. Python安装Numpy,matplotlib库

    <1> Numpy是一款基于python的功能强大的科学计算包.要安装numpy首先你得先安装python. python的安装非常简单,本人安装的是python2.7 具体安装步骤如下: ...

  9. lintcode-384-最长无重复字符的子串

    384-最长无重复字符的子串 给定一个字符串,请找出其中无重复字符的最长子字符串. 样例 例如,在"abcabcbb"中,其无重复字符的最长子字符串是"abc" ...

  10. MySQL 查询缓存机制(MySQL数据库调优)

    查询缓存机制:缓存的是查询语句的整个查询结果,是一个完整的select语句的缓存结果 哪些查询可能不会被缓存 :查询中包含UDF.存储函数.用户自定义变量.临时表.mysql库中系统表.或者包含列级别 ...