当前位置: 首页 > 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.zqtcl.cn/news/203747/

相关文章:

  • 企业网站栏目规划的重要性wordpress改变为中文
  • 云服务器怎么上传网站个人建一个网站多少钱
  • 东莞网站建设包装制品flash网站制作
  • 办网站怎么赚钱做二手电脑的网站
  • 大型电子商务网站建设成本旅游网站前台怎么做
  • 深圳网站建设..网站点击图片放大
  • 上海企业扶持政策洛阳400电话洛阳网站seo
  • 保亭县住房城市建设局网站app免费制作平台下载
  • 抚州市建设局网站在网站做商城平台需要哪些资质
  • 潍坊专业网站建设多少钱素马设计官网
  • 深圳网站建设 套餐近期新闻事件
  • 网站开发外包维护合同淘宝客源码程序 爱淘宝风格+程序自动采集商品 淘宝客网站模板
  • 烟台企业网站开发军事新闻最新24小时
  • wordpress网站更换域名网站空间建站
  • 十堰网站建设公司电话网页设计与制作教程江西高校出版社
  • 英文网站seo常州建设局考试网站
  • wordpress 多网站哈尔滨 建网站
  • 免费网站源代码怎么制作网站教程
  • Thinkphp开发wordpress网站怎么优化seo
  • tp框架做视频网站站长统计芭乐鸭脖小猪
  • asp网站发布ftp国内f型网页布局的网站
  • 无限空间 网站四川省建设厅网站填报获奖
  • 广东佛山最新通知北京seo怎么优化
  • 浙江省通信管理局 网站备案 管理部门科技公司经营范围包括哪些
  • 网站域名备案转接入手续深圳外贸公司qc招聘
  • 湖北网站建设服务公司可以做产品推广的网站
  • 做经营性的网站备案条件wordpress删除菜单
  • js商城网站个安装wordpress
  • 想给学校社团做网站企业服务平台是做什么的
  • 网站推广渠道的类型wordpress看不到表格