Jackson-操作XML

Jackson-操作XML

概述

Jackson是一个处理JSON的类库,不过它也通过jackson-dataformat-xml包提供了处理XML的功能。Jackson建议我们在处理XML的时候使用woodstox-core包,它是一个XML的实现,比JDK自带XML实现更加高效,也更加安全。

Jackson常用注解

1、@JacksonXmlRootElement

@JacksonXmlRootElement注解有两个属性:

  • namespace属性:用于指定XML根元素命名空间的名称。
  • localname属性:用于指定XML根元素节点标签的名称。

2、@JacksonXmlProperty

@JacksonXmlProperty注解有三个属性,namespace和localname属性用于指定XML命名空间的名称,isAttribute指定该属性作为XML的属性()还是作为子标签().

3、@JacksonXmlText

@JacksonXmlText注解将属性直接作为未被标签包裹的普通文本表现。

4、@JacksonXmlCData

@JacksonXmlCData将属性包裹在CDATA标签中。

5、@JsonPropertyOrder

@JsonPropertyOrder和@JsonProperty的index属性类似,指定属性序列化时的顺序。

6、@JsonIgnore

@JsonIgnore注解用于排除某个属性,这样该属性就不会被Jackson序列化和反序列化。

7、@JsonIgnoreProperties

@JsonIgnoreProperties注解是类注解。在序列化为JSON的时候,@JsonIgnoreProperties({“prop1”, “prop2”})会忽略pro1和pro2两个属性。

在从JSON反序列化为Java类的时候,@JsonIgnoreProperties(ignoreUnknown=true)会忽略所有没有Getter和Setter的属性。该注解在Java类和JSON不完全匹配的时候很有用。

集合元素的映射

@JacksonXmlElementWrapper

@JacksonXmlElementWrapper可以将列表数据转为XML节点。

demo代码

Java对象转XML

新建一个Java类

Data
@JacksonXmlRootElement(localName = "CMD")
public class RootXml {

    /**
     * Valid注解作用是为了保证层级嵌套验证成功
     */
    @Valid
    @JacksonXmlProperty(localName = "eb")
    private Eb eb;

    @Data
    public static class Eb {
        /**
         * PUB头
         */
        @Valid
        private Pub pub;

        /**
         * in
         */
        @Valid
        private In in;

    }

    @Data
    @Accessors(chain = true)
    public static class Pub {
        /**
         * 交易代码
         */
        @NotBlank(message = "交易代码不能为空")
        @JacksonXmlProperty(localName = "TransCode")
        private String transCode;

        /**
         * 集团CIS号
         * 客户注册时的归属编码
         */
        @NotBlank(message = "集团CIS号不能为空")
        @JacksonXmlProperty(localName = "CIS")
        private String cis;

        /**
         * 归属银行编号
         * 客户注册时的归属单位
         */
        @NotBlank(message = "归属银行编号不能为空")
        @JacksonXmlProperty(localName = "BankCode")
        private String bankCode;

        /**
         * 证书ID
         * 无证书客户可上送空
         */
        @JacksonXmlProperty(localName = "ID")
        private String id;

        /**
         * 交易日期
         * ERP系统产生的交易日期,格式是yyyyMMdd
         */
        @JacksonXmlProperty(localName = "TranDate")
        private String tranDate;

        /**
         * 交易时间
         * ERP系统产生的交易时间,格式如HHmmssSSS,精确到毫秒
         */
        @JacksonXmlProperty(localName = "TranTime")
        private String tranTime;

        /**
         * 指令包序列号
         * ERP系统产生的指令包序列号,一个集团永远不能重复
         */
        @NotBlank(message = "指令包序列号不能为空")
        @JacksonXmlProperty(localName = "fSeqno")
        private String sequence;
    }

    @Data
    public static class In {

        @JacksonXmlProperty(localName = "AccNo")
        private String accountNo;

        @JacksonXmlProperty(localName = "AreaCode")
        private String areaCode;

        @JacksonXmlProperty(localName = "MinAmt")
        private String minAmount;

        @JacksonXmlProperty(localName = "MaxAmt")
        private String maxAmount;

        @JacksonXmlProperty(localName = "BeginTime")
        private String beginTime;

        @JacksonXmlProperty(localName = "EndTime")
        private String endTime;

        @JacksonXmlProperty(localName = "NextTag")
        private String nextTag;
    }

    @Override
    public String toString() {
        return XmlUtils.asString(this);
    }
}

Java转XML代码:

public static String beanToXml() {
        RootXml.Pub pub = new RootXml.Pub();
        pub.setTransCode("transCode");
        pub.setBankCode("bankCode");
        pub.setId("id");
        RootXml.In in = new In();
        in.setAccountNo("account");
        in.setAreaCode("areaCode");
        RootXml.Eb eb = new RootXml.Eb();
        eb.setIn(in);
        eb.setPub(pub);
        RootXml rootXml = new RootXml();
        rootXml.setEb(eb);
        return XmlUtils.asString(rootXml);
}

转化结果:


    
        
            transCode
            
            bankCode
            id
            
            
            
        
        
            account
            areaCode
            
            
            
            
            
        
    


XML转Java对象

XML字符串:


    
        
            transCode
            
            bankCode
            id
            
            
            
        
        
            account
            areaCode
            
            
            
            
            
        
    

XML转化为Java对象代码

 public static void xmlToBean(String xml) {
        XmlMapper xmlMapper = new XmlMapper();
        try {
            RootXml rootXml = xmlMapper.readValue(xml, RootXml.class);
            System.out.println();
            System.out.println(rootXml.toString());
        } catch (Exception e) {
            System.out.println("xml转Bean时发生错误:" + e.getMessage());
            throw new RuntimeException(e);
        }
}

你可能感兴趣的:(Java编程开发,xml,jackson)