添加依赖:
<!-- 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>