zoukankan      html  css  js  c++  java
  • Spring MVC同时接收一个对象与List集合对象

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

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

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

    在网上找了,几种方案,都不行啊,有关于如何接收对象的,如何接收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

  • 相关阅读:
    Swift使用闭包表达式
    css + html 小知识总结
    关于javascript的误区
    什么是cookie
    css技术和实例
    闭包练习
    web 小知识
    javascript------>(此文转发)
    Spring Boot 系列 @ControllerAdvice 拦截异常并统一处理
    JSR-303 数据校验学习
  • 原文地址:https://www.cnblogs.com/libin6505/p/9511920.html
Copyright © 2011-2022 走看看