1、导入pom依赖
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
2、定义接受实体类,子标签就用内部子类即可
(1)原来的xml长这样
<?xml version="1.0" encoding="UTF-8"?>
<Request>
<From>ORG.BJCA.MMR</From>
<FromVersion>3.1.1.0</FromVersion>
<To>ORG.WNJK.HIS.XWYY</To>
<ToVersion>1.0.0.0</ToVersion>
<Version>3.1.1.0</Version>
<Identification>A15665780089BCC7117681761253C787</Identification>
<Date>2018-10-23</Date>
<Time>13:59:31</Time>
<Count>1</Count>
<ArchiveType>NOTICE</ArchiveType>
<Information>
<Patient>
<PatientName>张三</PatientName>
<MedRecordNo>003456</MedRecordNo>
<RegNo></RegNo>
<PatientID>232323</PatientID>
</Patient>
<Episode>
<EpisodeID>123456</EpisodeID>
<AdmType>3</AdmType>
<AdmDate>2018-12-01</AdmDate>
<DisDate>2018-12-21</DisDate>
<AdmNum>3</AdmNum>
</Episode>
<Documents></Documents>
</Information>
</Request>
实体类这样
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
@JacksonXmlRootElement(localName = "Request")
public class XmlRequestBody {
@JacksonXmlProperty(localName = "From")
private String From;
@JacksonXmlProperty(localName = "FromVersion")
private String FromVersion;
@JacksonXmlProperty(localName = "To")
private String To;
@JacksonXmlProperty(localName = "ToVersion")
private String ToVersion;
@JacksonXmlProperty(localName = "Version")
private String Version;
@JacksonXmlProperty(localName = "Identification")
private String Identification;
@JacksonXmlProperty(localName = "Date")
private String Date;
@JacksonXmlProperty(localName = "Time")
private String Time;
@JacksonXmlProperty(localName = "Count")
private String Count;
@JacksonXmlProperty(localName = "ArchiveType")
private String ArchiveType;
@JacksonXmlProperty(localName = "Information")
private Information Information;
@Data
public static class Information {
@JacksonXmlProperty(localName = "Patient")
private Patient Patient;
@JacksonXmlProperty(localName = "Episode")
private Episode Episode;
@JacksonXmlProperty(localName = "Documents")
private Documents Documents;
}
@Data
public static class Patient {
@JacksonXmlProperty(localName = "PatientName")
private String PatientName;
@JacksonXmlProperty(localName = "MedRecordNo")
private String MedRecordNo;
@JacksonXmlProperty(localName = "RegNo")
private String RegNo;
@JacksonXmlProperty(localName = "PatientID")
private String PatientID;
}
@Data
public static class Episode {
@JacksonXmlProperty(localName = "EpisodeID")
private String EpisodeID;
@JacksonXmlProperty(localName = "AdmType")
private String AdmType;
@JacksonXmlProperty(localName = "AdmDate")
private String AdmDate;
@JacksonXmlProperty(localName = "DisDate")
private String DisDate;
@JacksonXmlProperty(localName = "AdmNum")
private String AdmNum;
}
@Data
public static class Documents {
}
}
(2)假如是这样的xml,包含集合和属性名的
<?xml version="1.0" encoding="utf-8"?>
<request>
<action>功能码</action>
<params>
<param name="cmzh">1111</param>
</params>
</request>
@Data
@NoArgsConstructor
@AllArgsConstructor
@JacksonXmlRootElement(localName = "request")
@JsonIgnoreProperties(ignoreUnknown = true)
public class XmlRequestBody {
@JacksonXmlProperty(localName = "action")
private String action;
//集合名
@JacksonXmlElementWrapper(localName = "params")
private List<Param> params;
@Data
public static class Param {
//代表你要获取<param name="cmzh">1111</param>中的1111
@JacksonXmlText
private String cmzh;
//name="cmzh"
@JacksonXmlProperty(isAttribute = true,localName = "name")
private String name;
}
}
3、contrlloer方法接受,consumes接受类型xml,produces 返回类型json
@RestController
@RequestMapping("/API")
public class AdviceController {
@PostMapping(value = "/NoticeArchive",
consumes = MediaType.APPLICATION_XML_VALUE,
produces = MediaType.APPLICATION_JSON_VALUE)
public Response getAdvice(@RequestBody XmlRequestBody xmlRequestBody) throws DocumentException {
if (xmlRequestBody != null) {
String CZYH = xmlRequestBody.getInformation().getEpisode().getEpisodeID();
}
}
}
4、注意
消息转换器MappingJackson2XmlHttpMessageConverter谨慎重写,重写了可能会导致上面的实体转换异常,自己酌情研究