jackson解析post方式的XML请求获取参数

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谨慎重写,重写了可能会导致上面的实体转换异常,自己酌情研究

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值