当前位置: 首页 > news >正文

企业网站建设合同书标准版昆明网站建设工作室

企业网站建设合同书标准版,昆明网站建设工作室,保定网站制作网页,企业建站新闻内容简介 本篇文章主要解决了上篇文章中遗留的对象嵌套问题#xff0c;要想全面解析无限极的对象嵌套需要使用递归去解决 上文链接#xff1a; 使用CXF调用WSDL#xff08;一#xff09; 上文回顾 上文使用了单方法“ call() ”解决了List和基本类型#xff08;含String要想全面解析无限极的对象嵌套需要使用递归去解决 上文链接 使用CXF调用WSDL一 上文回顾 上文使用了单方法“ call() ”解决了List和基本类型含String以及对象的解析但遗留了对象嵌套问题本文将把 “ call() ” 方法中关于对象解析的部分拆分出独立的方法 “ analysisParam() ”然后使用递归解决对象的嵌套问题 正文 /*** 调用远程过程*/public Object call(DTGMM1020GERP paramEntity) {Object result null;log.info([PO创建时]入参{},JSON.toJSONString(paramEntity,true));Map map JSONObject.parseObject(JSON.toJSONString(paramEntity, SerializerFeature.WriteDateUseDateFormat), Map.class);MapString,Object wsdl getWSDLContent();Client client (Client) wsdl.get(client);ListMessagePartInfo partInfos (ListMessagePartInfo) wsdl.get(messagePartInfo);QName qName (QName) wsdl.get(qname);String clazzName partInfos.get(0).getTypeClass().getName(); try {Object requestParamObject Thread.currentThread().getContextClassLoader().loadClass(clazzName).newInstance();requestParamObject analysisParam(requestParamObject,map);log.info(请求参数{},JSON.toJSON(requestParamObject));result client.invoke(qName, requestParamObject);log.info(响应结果{},JSON.toJSONString(result,true));} catch (Exception e) {e.printStackTrace();}return result;} 解说方法 “ call() ” 接收一个 “ DTGMM1020GERP ” 对象作为入参并返回一个Object对象该方法主要业务就是将入参对象转换成map对象而后读取WSDL文件内容并传入给 “ analysisParam() ” 方法解析其中requestParamObject是读出的WSDL文件的节点map是待写入节点的值 private static Object analysisParam(Object req, Map map) throws InstantiationException, IllegalAccessException {Field[] fields req.getClass().getDeclaredFields();for (Field field : fields) {field.setAccessible(true);boolean b field.getGenericType() instanceof ParameterizedType;//如果是泛型并且是List类型if(b field.getType() List.class){List? cParam (List?) map.get(field.getName());log.info(子对象参数{},cParam);if(CollectionUtils.isEmpty(cParam)){continue;}Type type ((ParameterizedType)field.getGenericType()).getActualTypeArguments()[0];Class? aClass (Class?) type;Object cObj aClass.newInstance();log.info(子对象{},cObj);Field[] cFields cObj.getClass().getDeclaredFields();for (Field cField : cFields) {cField.setAccessible(true);List? target cParam.stream().map(o - {Map ccParam JSONObject.parseObject(JSON.toJSONString(o),Map.class);Object strParam ccParam.get(cField.getName());//如果子对象类型是基本类型或String类型那就直接赋值负责就递归if(cField.getType().isPrimitive() || cField.getType() String.class){try {if(null ! strParam){cField.set(cObj,strParam);}} catch (IllegalAccessException e) {throw new RuntimeException(e);}}else{try {Object obj cField.getType().newInstance();Map objMap JSONObject.parseObject(JSON.toJSONString(strParam),Map.class);if(!CollectionUtils.isEmpty(objMap)){analysisParam(obj,objMap);cField.set(cObj,obj);}} catch (InstantiationException e) {throw new RuntimeException(e);} catch (IllegalAccessException e) {throw new RuntimeException(e);}}return strParam;}).collect(Collectors.toList());/*Object targetResp target.get(0);cField.set(cObj,targetResp);*/}ListObject cObjs new ArrayList();cObjs.add(cObj);//给父对象赋值field.set(req,cObjs);}else if(field.getType().isPrimitive() || field.getType() String.class){//如果是基本类型或String类型field.set(req,map.get(field.getName()));}else{//按对象处理Object o field.getType().newInstance();Map childrenObjMap (Map) map.get(field.getName());if(!CollectionUtils.isEmpty(childrenObjMap)){writeFieldValue(o,childrenObjMap);field.set(req,o);}}}return req;} 步骤解析 一、使用反射获取待解析节点的字段 二、进行第一层 for 循环解析节点先判断了字段的类型是否为泛型且为List类型如果不是泛型且不是List类型再判断是否为基本类型或是String类型如果也不是那就当成普通对象处理 三、如果第一层 for 循环中的类型为泛型且为List类型时则进行第二层 for 循环处理第二层循环同样判断子对象字段值是否为基本类型或String类型如果是则直接赋值如果不是则说明是一个对象至于是个什么对象List基本类型StringPOJO无需理会直接进行递归解析即可 注意map的key需和待解析的节点字段名保持一致因为map.get()是通过field.getName()取值的 本文中引用到的其他方法请从上一篇文章中获取 使用CXF调用WSDL一 完成 文末 这是我mock加数据的方法入参对象可以使用该方法快速生成mock数据本文中的DTGMM1020GERP  public static T T getEntityData(T t) {Field[] field t.getClass().getDeclaredFields();for (Field f : field) {f.setAccessible(true);try {Random random new Random();int num random.nextInt(10);f.set(t,num);} catch (IllegalAccessException e) {throw new RuntimeException(e);}}return t;} 用法 只需要定义好对象的嵌套层级即可  ListDTGMM1020GERP list new ArrayList(); DTGMM1020GERP entity new DTGMM1020GERP(); entity getEntityData(entity); list.add(entity); 结束
http://www.dnsts.com.cn/news/39101.html

相关文章:

  • 试玩平台怎么做网站深圳比较出名的互联网公司
  • 企业网站建设和管理django 网站开发视频
  • 北京著名网站建设公司动易网站默认密码
  • 企业网站建设费用定金怎么做账nana wordpress主题安全不
  • 哪个网站做汽车保养比较好wordpress文章内页的图片地址修改
  • 泉州网站制作平台thinkphp做网站后台
  • 装修网站效果图网站制作知识
  • 做简历做得好的网站idc机房租赁价格
  • 网站设计说明书范文外贸网站wordpress加ssl
  • 网站架构 seo灰色调网站
  • 建网站的步骤和方法最好用的网站
  • 商业网站建设平台华艺网络网站开发
  • 温州 网站制作软件外包公司创业
  • 成品免费网站源码青岛专业制作网站
  • 仿一个网站要多少钱做私活 网站
  • 品牌网站设计视频教程企业网站推广推广阶段
  • 部门网站建设注意事项哪个网站能看到医生做的全部手术
  • 企业网站关键词微信注册账号申请
  • 小松建设官方网站网页设计的背景代码大全
  • 使用vue做的网站有哪些修改文案支持在线图片编辑
  • 展示网站欣赏钓鱼网站的域名怎么不稳定
  • 网站页面的组成wordpress子目录404
  • 网站开发与管理实训项目厦门做网站优化的公司
  • 开发网站用什么语言wordpress关闭裁剪缩略图
  • 阿里云虚拟主机做2个网站吗网站建设丶金手指下拉十五
  • wordpress用户导入数据库表口碑优化
  • 固安建设行政主管部门官方网站怎么做外贸个人网站
  • 快速判断网站开发语言个人微企业网站模板
  • 哪里可做网站商标注册证查询网
  • 一般做兼职在哪个网站廊坊网站专业制作