springboot接口对XML处理

it2024-08-08  40

添加依赖:

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.dataformat/jackson-dataformat-xml --> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.9.9</version> </dependency>

接收bean

package com.test.modal; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; import lombok.Data; @JacksonXmlRootElement(localName = "o") @Data public class XmlBean { private TX_BODY TX_BODY; private TX_HEADER TX_HEADER; @JacksonXmlProperty(localName = "TX_BODY") public com.test.modal.TX_BODY getTX_BODY() { return TX_BODY; } @JacksonXmlProperty(localName = "TX_HEADER") public com.test.modal.TX_HEADER getTX_HEADER() { return TX_HEADER; } } package com.test.modal; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; import lombok.Data; @Data public class TX_BODY { @JacksonXmlProperty(localName = "e") private E e; } package com.test.modal; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; import lombok.Data; @Data public class TX_HEADER { @JacksonXmlProperty(localName = "SYS_EVT_TRACE_ID", isAttribute = true) private String SYS_EVT_TRACE_ID; @JacksonXmlProperty(localName = "SYS_PKG_STS_TYPE", isAttribute = true) private String SYS_PKG_STS_TYPE; @JacksonXmlProperty(localName = "SYS_PKG_VRSN", isAttribute = true) private String SYS_PKG_VRSN; @JacksonXmlProperty(localName = "SYS_REQ_TIME", isAttribute = true) private String SYS_REQ_TIME; @JacksonXmlProperty(localName = "SYS_TX_CODE", isAttribute = true) private String SYS_TX_CODE; } package com.test.modal; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; import lombok.Data; @Data public class E { private String MANUF_ID; private String PICTURE; @JacksonXmlProperty(localName = "MANUF_ID", isAttribute = true) public String getMANUF_ID() { return MANUF_ID; } @JacksonXmlProperty(localName = "PICTURE", isAttribute = true) public String getPICTURE() { return PICTURE; } }

接口定义:

@PostMapping(value = "xmlres", consumes = MediaType.APPLICATION_XML_VALUE, produces = MediaType.APPLICATION_XML_VALUE) public Object resXmlTest(@RequestBody XmlBean bean) { XmlMapper xmlMapper = new XmlMapper(); xmlMapper.setDefaultUseWrapper(false); xmlMapper.configure(ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true); XmlRes xmlRes = new XmlRes(); TXRespBody txRespBody = new TXRespBody(); RespElement respElement = new RespElement(); RespElement.Blinks blinks = new RespElement.Blinks(); RespElement.Msg msg = new RespElement.Msg(); msg.setMsg("success"); respElement.setMsg(msg); RespElement.Result result = new RespElement.Result(); result.setResult("1"); respElement.setResult(result); RespElement.PupilDis pupilDis =new RespElement.PupilDis(); RespElement.Pup pup = new RespElement.Pup(); RespElement.Pup pup2 = new RespElement.Pup(); RespElement.Pup pup3 = new RespElement.Pup(); pup.setE("1"); pup2.setE("2"); pup3.setE("3"); pupilDis.setE(new RespElement.Pup[]{pup,pup2,pup3}); respElement.setPupilDis(pupilDis); RespElement.FaceCounts faceCounts = new RespElement.FaceCounts(); RespElement.Fcouts fcouts = new RespElement.Fcouts(); fcouts.setE("0"); RespElement.Fcouts fcouts2 = new RespElement.Fcouts(); fcouts2.setE("1"); RespElement.Fcouts fcouts3 = new RespElement.Fcouts(); fcouts3.setE("2"); faceCounts.setE(new RespElement.Fcouts[]{fcouts, fcouts2, fcouts3}); respElement.setFaceCounts(faceCounts); RespElement.FaceAngels faceAngels = new RespElement.FaceAngels(); RespElement.Angeles angeles = new RespElement.Angeles(); angeles.setE(0.83749379f); RespElement.Angeles angeles1 = new RespElement.Angeles(); angeles1.setE(0.83749379f); RespElement.Angeles angeles2 = new RespElement.Angeles(); angeles2.setE(0.83749379f); faceAngels.setE(new RespElement.Angeles[]{angeles,angeles1,angeles2}); respElement.setFaceAngels(faceAngels); RespElement.KeyPointsOcculude keyPointsOcculude = new RespElement.KeyPointsOcculude(); RespElement.Opints opints = new RespElement.Opints(); opints.setE("1"); RespElement.Opints opints2 = new RespElement.Opints(); opints2.setE("2"); RespElement.Opints opints3 = new RespElement.Opints(); opints3.setE("3"); keyPointsOcculude.setE(new RespElement.Opints[]{opints,opints2,opints3}); respElement.setKeyPointsOcculude(keyPointsOcculude); RespElement.Clarity clarity = new RespElement.Clarity(); List<String> clarityList = Arrays.asList("1","2"); List<RespElement.Cla> claList = new ArrayList<>(); for (int i = 0; i < clarityList.size(); i++) { RespElement.Cla cla = new RespElement.Cla(); String str = clarityList.get(i); cla.setE(str); claList.add(cla); } RespElement.Cla[] eArr = claList.toArray(new RespElement.Cla[claList.size()]); clarity.setE(eArr); respElement.setClarity(clarity); RespElement.LightnessScore lightnessScore = new RespElement.LightnessScore(); RespElement.Lightn lightn1 = new RespElement.Lightn(); lightn1.setE("1"); RespElement.Lightn lightn2 = new RespElement.Lightn(); lightn2.setE("2"); RespElement.Lightn lightn3 = new RespElement.Lightn(); lightn3.setE("3"); lightnessScore.setE(new RespElement.Lightn[]{lightn1,lightn2,lightn3}); respElement.setLightnessScore(lightnessScore); RespElement.TotalPoint totalPoint=new RespElement.TotalPoint(); totalPoint.setTotalPoint("0.65"); respElement.setTotalPoint(totalPoint); blinks.setBlinks("1"); respElement.setBlinks(blinks); txRespBody.setE(respElement); TXRespHeader txRespHeader = new TXRespHeader(); TXRespHeader.SysEvtTraceID sysEvtTraceID = new TXRespHeader.SysEvtTraceID(); sysEvtTraceID.setTrcId(bean.getTX_HEADER().getSYS_EVT_TRACE_ID()); txRespHeader.setSYS_EVT_TRACE_ID(sysEvtTraceID); TXRespHeader.SysPkgStsType sysPkgStsType = new TXRespHeader.SysPkgStsType(); sysPkgStsType.setStsType("1"); txRespHeader.setSYS_PKG_STS_TYPE(sysPkgStsType); TXRespHeader.SysRecvTime sysRecvTime = new TXRespHeader.SysRecvTime(); sysRecvTime.setRecvType("121212"); txRespHeader.setSYS_RECV_TIME(sysRecvTime); TXRespHeader.SysRespCode sysRespCode = new TXRespHeader.SysRespCode(); sysRespCode.setRespCode("212"); txRespHeader.setSYS_RESP_CODE(sysRespCode); TXRespHeader.SysRespDesc sysRespDesc = new TXRespHeader.SysRespDesc(); sysRespDesc.setRespDesc("11"); txRespHeader.setSYS_RESP_DESC(sysRespDesc); TXRespHeader.SysRespTime sysRespTime = new TXRespHeader.SysRespTime(); sysRespTime.setRespTime("904895045-094"); txRespHeader.setSYS_RESP_TIME(sysRespTime); TXRespHeader.SysTxStatus sysTxStatus =new TXRespHeader.SysTxStatus(); sysTxStatus.setTxStatus("121"); txRespHeader.setSYS_TX_STATUS(sysTxStatus); xmlRes.setTxRespHeader(txRespHeader); xmlRes.setTxRespBody(txRespBody); try{ return xmlMapper.writeValueAsString(xmlRes); }catch (Exception e){ return xmlRes; } }

响应bean:

package com.test.controller; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement; import com.test.modal.TXRespBody; import com.test.modal.TXRespHeader; import lombok.Data; @Data @JacksonXmlRootElement(localName = "o") public class XmlRes { @JacksonXmlProperty(localName = "TX_BODY") private TXRespBody txRespBody; @JacksonXmlProperty(localName = "TX_HEADER") private TXRespHeader txRespHeader; } package com.test.modal; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; import lombok.Data; @Data public class TXRespBody { @JacksonXmlProperty(localName = "e") private RespElement e; @JacksonXmlProperty(localName = "class",isAttribute = true) private String arr="array"; } package com.test.modal; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlText; import lombok.Data; import lombok.NoArgsConstructor; @Data public class TXRespHeader { @JacksonXmlProperty(localName = "class", isAttribute = true) private String obj = "object"; private SysEvtTraceID SYS_EVT_TRACE_ID; private SysPkgStsType SYS_PKG_STS_TYPE; private SysRecvTime SYS_RECV_TIME; private SysRespCode SYS_RESP_CODE; private SysRespDesc SYS_RESP_DESC; private SysRespTime SYS_RESP_TIME; private SysTxStatus SYS_TX_STATUS; @NoArgsConstructor @Data public static class SysEvtTraceID { @JacksonXmlText private String trcId; @JacksonXmlProperty(localName = "type", isAttribute = true) private String str = "string"; } @NoArgsConstructor @Data public static class SysPkgStsType { @JacksonXmlText private String stsType; @JacksonXmlProperty(localName = "type", isAttribute = true) private String str = "string"; } @NoArgsConstructor @Data public static class SysRecvTime { @JacksonXmlText private String recvType; @JacksonXmlProperty(localName = "type", isAttribute = true) private String str = "string"; } @NoArgsConstructor @Data public static class SysRespCode { @JacksonXmlText private String respCode; @JacksonXmlProperty(localName = "type", isAttribute = true) private String str = "string"; } @NoArgsConstructor @Data public static class SysRespDesc { @JacksonXmlText private String respDesc; @JacksonXmlProperty(localName = "type", isAttribute = true) private String str = "string"; } @NoArgsConstructor @Data public static class SysRespTime { @JacksonXmlText private String respTime; @JacksonXmlProperty(localName = "type", isAttribute = true) private String str = "string"; } @NoArgsConstructor @Data public static class SysTxStatus { @JacksonXmlText private String txStatus; @JacksonXmlProperty(localName = "type", isAttribute = true) private String str = "string"; } @JacksonXmlProperty(localName = "SYS_EVT_TRACE_ID") public SysEvtTraceID getSYS_EVT_TRACE_ID() { return SYS_EVT_TRACE_ID; } @JacksonXmlProperty(localName = "SYS_PKG_STS_TYPE") public SysPkgStsType getSYS_PKG_STS_TYPE() { return SYS_PKG_STS_TYPE; } @JacksonXmlProperty(localName = "SYS_RECV_TIME") public SysRecvTime getSYS_RECV_TIME() { return SYS_RECV_TIME; } @JacksonXmlProperty(localName = "SYS_RESP_CODE") public SysRespCode getSYS_RESP_CODE() { return SYS_RESP_CODE; } @JacksonXmlProperty(localName = "SYS_RESP_DESC") public SysRespDesc getSYS_RESP_DESC() { return SYS_RESP_DESC; } @JacksonXmlProperty(localName = "SYS_RESP_TIME") public SysRespTime getSYS_RESP_TIME() { return SYS_RESP_TIME; } @JacksonXmlProperty(localName = "SYS_TX_STATUS") public SysTxStatus getSYS_TX_STATUS() { return SYS_TX_STATUS; } } package com.test.modal; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlText; import lombok.Data; import lombok.NoArgsConstructor; import javax.print.attribute.standard.OrientationRequested; import java.util.List; @Data public class RespElement { @JacksonXmlProperty(localName = "class",isAttribute = true) private String obj = "object"; private Clarity clarity; private Blinks blinks; private FaceAngels faceAngels; private FaceCounts faceCounts; private KeyPointsOcculude keyPointsOcculude; private LightnessScore lightnessScore; private Msg msg; private Result result; private PupilDis pupilDis; private TotalPoint totalPoint; //睁闭眼检测结果父节点 @NoArgsConstructor @Data public static class Blinks{ //睁闭眼检测结果 @JacksonXmlText private String blinks; @JacksonXmlProperty(localName = "type",isAttribute = true) private String str="string"; } //人脸清晰度检测结果父节点 @NoArgsConstructor @Data public static class Clarity { @JacksonXmlElementWrapper(useWrapping = false) private Cla[] e; @JacksonXmlProperty(localName = "class",isAttribute = true) private String arr="array"; } //人脸清晰度检测结果子节点 @NoArgsConstructor @Data public static class Cla{ //人脸清晰度检测结果 @JacksonXmlText private String e; @JacksonXmlProperty(localName = "type",isAttribute = true) private String str="string"; } //睁闭眼检测结果父节点 @NoArgsConstructor @Data public static class FaceAngels { @JacksonXmlElementWrapper(useWrapping = false) private Angeles[] e; @JacksonXmlProperty(localName = "class",isAttribute = true) private String arr="array"; } //睁闭眼检测结果子节点 @NoArgsConstructor @Data public static class Angeles{ @JacksonXmlText private float e; @JacksonXmlProperty(localName = "type",isAttribute = true) private String str="string"; } //人脸数量结果父节点 @NoArgsConstructor @Data public static class FaceCounts{ @JacksonXmlElementWrapper(useWrapping = false) private Fcouts[] e; @JacksonXmlProperty(localName = "class",isAttribute = true) private String arr="array"; } //人脸数量结果子节点 @NoArgsConstructor @Data public static class Fcouts{ //人脸数量结果子节点 @JacksonXmlText private String e; @JacksonXmlProperty(localName = "type",isAttribute = true) private String str="string"; } //人脸关键点遮挡检测结果父节点 @NoArgsConstructor @Data public static class KeyPointsOcculude{ @JacksonXmlElementWrapper(useWrapping = false) private Opints[] e; @JacksonXmlProperty(localName = "class",isAttribute = true) private String arr="array"; } //人脸关键点遮挡检测结果子节点 @NoArgsConstructor @Data public static class Opints{ @JacksonXmlText private String e; @JacksonXmlProperty(localName = "type",isAttribute = true) private String str="string"; } //人脸亮度检测结果父节点 @NoArgsConstructor @Data public static class LightnessScore{ @JacksonXmlElementWrapper(useWrapping = false) private Lightn[] e; @JacksonXmlProperty(localName = "class",isAttribute = true) private String arr="array"; } //人脸亮度检测结果子节点 @NoArgsConstructor @Data public static class Lightn{ @JacksonXmlText private String e; @JacksonXmlProperty(localName = "type",isAttribute = true) private String str="string"; } //响应信息 @NoArgsConstructor @Data public static class Msg{ @JacksonXmlText private String msg; @JacksonXmlProperty(localName = "type",isAttribute = true) private String str="string"; } //综合评分 @NoArgsConstructor @Data public static class TotalPoint{ @JacksonXmlText private String totalPoint; @JacksonXmlProperty(localName = "type",isAttribute = true) private String str="string"; } //响应结果 @NoArgsConstructor @Data public static class Result{ @JacksonXmlText private String result; @JacksonXmlProperty(localName = "type",isAttribute = true) private String str="string"; } //瞳间距检测结果父节点 @NoArgsConstructor @Data public static class PupilDis{ @JacksonXmlElementWrapper(useWrapping = false) private Pup[] e; @JacksonXmlProperty(localName = "class",isAttribute = true) private String arr="array"; } //瞳间距检测结果子节点 @NoArgsConstructor @Data public static class Pup{ @JacksonXmlText private String e; @JacksonXmlProperty(localName = "type",isAttribute = true) private String str="string"; } }

 

响应数据结构:

<?xml version='1.0' encoding='UTF-8'?> <o> <TX_BODY class="array"> <e class="object"> <clarity class="array"> <e type="string">1</e> <e type="string">2</e> </clarity> <blinks type="string">1</blinks> <faceAngels class="array"> <e type="string">0.8374938</e> <e type="string">0.8374938</e> <e type="string">0.8374938</e> </faceAngels> <faceCounts class="array"> <e type="string">0</e> <e type="string">1</e> <e type="string">2</e> </faceCounts> <keyPointsOcculude class="array"> <e type="string">1</e> <e type="string">2</e> <e type="string">3</e> </keyPointsOcculude> <lightnessScore class="array"> <e type="string">1</e> <e type="string">2</e> <e type="string">3</e> </lightnessScore> <msg type="string">success</msg> <result type="string">1</result> <pupilDis class="array"> <e type="string">1</e> <e type="string">2</e> <e type="string">3</e> </pupilDis> <totalPoint type="string">0.65</totalPoint> </e> </TX_BODY> <TX_HEADER class="object"> <SYS_RECV_TIME type="string">121212</SYS_RECV_TIME> <SYS_TX_STATUS type="string">121</SYS_TX_STATUS> <SYS_RESP_CODE type="string">212</SYS_RESP_CODE> <SYS_RESP_TIME type="string">904895045-094</SYS_RESP_TIME> <SYS_RESP_DESC type="string">11</SYS_RESP_DESC> <SYS_EVT_TRACE_ID type="string">20170311000001</SYS_EVT_TRACE_ID> <SYS_PKG_STS_TYPE type="string">1</SYS_PKG_STS_TYPE> </TX_HEADER> </o>

 

最新回复(0)