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

SpringBoot使用Jackson-XML裁剪多余的根节点

相关博客:《SpringBoot集成WebService(wsdl)》

比如我们有以下入参

我们只需要MedicalCardInfo这个根节点,其余都不要。如何处理?

<A><B><Sender>Aa</Sender><MsgType>Bb</MsgType><MsgVersion>Cc</MsgVersion></B><MsgBody><MedicalCardInfo><AuthorOrganization>1</AuthorOrganization><IdCard>1234567</IdCard></MedicalCardInfo></MsgBody>
</A>

解决办法

	private String getTargetXmlString(String sourceXmlString, String xmlRootElement) throws ParserConfigurationException, TransformerException, IOException, SAXException {DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document document = builder.parse(new InputSource(new StringReader(sourceXmlString)));NodeList msgBodyList = document.getElementsByTagName(xmlRootElement);if (msgBodyList.getLength() == 0) {return null;}Node msgBodyNode = msgBodyList.item(0);TransformerFactory transformerFactory = TransformerFactory.newInstance();Transformer transformer = transformerFactory.newTransformer();transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");transformer.setOutputProperty(OutputKeys.INDENT, "yes");StringWriter writer = new StringWriter();transformer.transform(new DOMSource(msgBodyNode), new StreamResult(writer));return writer.getBuffer().toString();}@Testpublic void test() throws ParserConfigurationException, IOException, TransformerException, SAXException {String params = "<A>\n" +"    <B>\n" +"        <Sender>Aa</Sender>\n" +"        <MsgType>Bb</MsgType>\n" +"        <MsgVersion>Cc</MsgVersion>\n" +"    </B>\n" +"    <MsgBody>\n" +"        <MedicalCardInfo>\n" +"            <AuthorOrganization>1</AuthorOrganization>\n" +"            <IdCard>1234567</IdCard>\n" +"        </MedicalCardInfo>\n" +"    </MsgBody>\n" +"</A>";params = getTargetXmlString(params, "MedicalCardInfo");System.out.println(params);}

输出

<MedicalCardInfo><AuthorOrganization>1</AuthorOrganization><IdCard>1234567</IdCard>
</MedicalCardInfo>

配合Jackson-XML使用

伪代码

		//获取统一入口接口IWebService<T> webService = (IWebService<T>) ApplicationContextUtils.getBean(service);//获取统一入口接口请求泛型参数的具体 DTOClass<T> parameterType = (Class<T>) WebServiceTypeCache.getParameterType(service);//获取具体 DTO @JacksonXmlRootElement注解 localName 的 value(即需要的根节点)JacksonXmlRootElement annotation = parameterType.getAnnotation(JacksonXmlRootElement.class);String xmlRootElement = annotation.localName();//截取并替换根节点为需要的根节点params = getTargetXmlString(params, xmlRootElement);//转为具体的请求DTOT req = JacksonUtils.xmlMapper.readValue(params, parameterType);//调用具体的实现类的方法,并传入具体的请求 DTOR r;try {r = R.ok(webService.handle(req));} catch (Exception e) {log.error("{}异常:", service, e);r = R.error(e.getMessage());}String rString = JacksonUtils.xmlMapper.writeValueAsString(r);log.info("{}出参:{}", service, rString);return rString;
http://www.lryc.cn/news/419446.html

相关文章:

  • vue路由学习
  • Kubernetes基于helm部署Kafka_Kraft集群并取消SASL认证且开启数据持久化
  • kotlin -- Flow和Rxjava 对比
  • 【JVM篇】自动内存管理——HotSpot虚拟机对象探秘
  • 代谢组数据分析(十七):基于structToolbox代谢组分析流程讲解
  • 科普课堂走起 | 什么是网络安全和数据安全?
  • C语言中常用的函数
  • 如何在SpringBoot中进行单元测试?
  • 分布式事务学习整理
  • Conda配置瘦身术:精通conda config --remove命令
  • Windows下编译安装PETSc
  • phpstudy搭建sqlilabs本地靶场
  • Linux 实验基础环境准备(外网篇)
  • centos8 安装mysql 制作备份数据库脚本
  • Parsing error: The keyword ‘interface‘ is reserved配置优化
  • C语言指针详解-包过系列(二)目录版
  • 驰骋BPM RunSQL_Init SQL注入漏洞复现
  • 谷粒商城实战笔记-143-性能压测-压力测试-JMeter在windows下地址占用bug解决
  • Pod的调度机制
  • JIT(即时编译)编译器
  • 循环执行时数据的同步方式
  • Jvm G1与ZGC启动参数
  • zdpgo_gin_zap 整合zdpgo_gin框架和zdpgo_zap框架的日志中间件,用于实现路由日志记录
  • FOC电流环
  • 工业设备数据采集方案的设计实施与应用-天拓四方
  • 【MySQL】索引——索引的实现、B+ vs B、聚簇索引 VS 非聚簇索引、索引操作、创建索引、查询索引、删除索引
  • 剖析HTML 元素——WEB开发系列02
  • 影响3D打印零件品质的关键因素探析
  • Oracle事务是怎么练成的
  • 线程与多线程(一)