根据xml模板导出java对象

需求


前端页面添加一个导出xml按钮,实现选中数据按给定xml模板导出数据

模板样图

 导出结果样图

 前端代码

<a-button type="primary" icon="download" @click="handleExportXml('title')">导出Xml</a-button>

<script>

 export default {

 url: {
         
          exportXmlUrl: "/./exportXml" //后端路由
         
          
        },

methods:{
/* 导出 xml*/

    handleExportXml(fileName){
      console.log("导出xml")
      console.log("选中数据",this.selectedRowKeys)

      if(!fileName || typeof fileName != "string"){
        fileName = "导出文件"
      }
      let param = this.getQueryParams();

      if(this.selectedRowKeys && this.selectedRowKeys.length>0){
        param['selections'] = this.selectedRowKeys.join(",")
      }
      downFile(this.url.exportXmlUrl,param).then((data)=>{
        if (!data) {
          this.$message.warning("文件下载失败")
          return
        }
        if (typeof window.navigator.msSaveBlob !== 'undefined') {
          window.navigator.msSaveBlob(new Blob([data],{type: 'text/xml'}), fileName+'.xml')
        }else{
          let url = window.URL.createObjectURL(new Blob([data],{type: 'text/xml'}))

          let link = document.createElement('a')
          link.style.display = 'none'
          link.href = url
          link.setAttribute('download', fileName+'.xml')
          document.body.appendChild(link)
          link.click()
          document.body.removeChild(link); //下载完成移除元素
          window.URL.revokeObjectURL(url); //释放掉blob对象
        }
      })
    }
}

}
</select>

后端代码

/**
	 * 导出xml数据
	 * @param request
	 * @param ctFinancialProductInfor
	 * @return
	 */
	 @RequestMapping(value = "/exportXml")
	 public String exportXml(HttpServletRequest request, CtFinancialProductInfor ctFinancialProductInfor) {

		 return this.createXml( request, ctFinancialProductInfor);
	 }

	public String createXml(HttpServletRequest request, CtFinancialProductInfor ctFinancialProductInfor){

		try {

			//获取查询数据
			List datalist = super.listdata( request,ctFinancialProductInfor  );

			// 先把List<T>对象转成json字符串
			String into = JSONObject.toJSONString(datalist);

			// 把json字符串转换成List<Map<Object, Object>>
			List<Map<Object, Object>> mapList = (List<Map<Object, Object>>) JSONArray.parse(into);

			final String  head = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n";
			final String root_start = "<RelatedParties>";
			final String root_end = "</RelatedParties>";

			StringBuffer sb = new StringBuffer();
			sb.append(head);
			sb.append(root_start);
			//xml模板目录
			MessageFormat mf = new MessageFormat(readFileByer("jeecg-boot-module-system/src/main/resources/xml_template/B01金融产品_YYYYMMDD.xml"));
			Map<Object, Object> map;

			for (int i=0; i<mapList.size(); i++) {
				// 获取Map<Object, Object>对象
				map = mapList.get(i);
				//删除不必要的字段
				String[] move_key = {"id","createTime","updateTime","createBy","cardType","createPerson","updateBy","sysOrgCode"};

				for(int j =0;j<move_key.length;j++){

					map.remove(move_key[j]);
				}
				String[] strings =map.values().toArray(new String[0]);

				sb.append(mf.format( strings));
			}
			sb.append(root_end);
			System.out.println("生成xml成功");
			return sb.toString();
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("生成xml失败");
			return null;
		}

	}

	//使用模板生成xml文件
	public static String readFileByer(String filePath) {
		StringBuffer sb = new StringBuffer();
		File file = new File(filePath);
		FileReader fr = null;
		try {
			fr = new FileReader(file);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
		BufferedReader br = new BufferedReader(fr);

		String strLine = "";
		try {
			while ((strLine = br.readLine()) != null) {
				sb.append(strLine);
				sb.append("\n");
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				fr.close();
				br.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return sb.toString();
	}


protected List listdata(HttpServletRequest request, T object) {
        // Step.1 组装查询条件
        QueryWrapper<T> queryWrapper = QueryGenerator.initQueryWrapper(object, request.getParameterMap());

        // Step.2 获取导出数据
        List<T> pageList = service.list(queryWrapper);
        List<T> exportList = null;

        // 过滤选中数据
        String selections = request.getParameter("selections");
        if (oConvertUtils.isNotEmpty(selections)) {
            List<String> selectionList = Arrays.asList(selections.split(","));
            exportList = pageList.stream().filter(item -> selectionList.contains(getId(item))).collect(Collectors.toList());
        } else {
            exportList = pageList;
        }
        return exportList;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值