欢迎来到Vincentyw的博客

该来的终究会来,该走的也一定会离开。凡事都存在前因后果,因缘成熟了,果报便产生了,无法阻挡。
但是发生过了就会消失,有来就有走,一切都是过客,把握自己当下的因缘,承担起自己该承担的责任,做好眼前该做的事情,做的时候尽全力,过去便放下,放下即自在。

Jackson用于Bean和XML之间转换

                                                    Jackson用于Bean和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

 1 Data
 2 @JacksonXmlRootElement(localName = "CMD")
 3 public class RootXml {
 4     /**
 5      * Valid注解作用是为了保证层级嵌套验证成功
 6      */
 7     @Valid
 8     @JacksonXmlProperty(localName = "eb")
 9     private Eb eb;
10     @Data
11     public static class Eb {
12         /**
13          * PUB头
14          */
15         @Valid
16         private Pub pub;
17         /**
18          * in
19          */
20         @Valid
21         private In in;
22     }
23     @Data
24     @Accessors(chain = true)
25     public static class Pub {
26         /**
27          * 交易代码
28          */
29         @NotBlank(message = "交易代码不能为空")
30         @JacksonXmlProperty(localName = "TransCode")
31         private String transCode;
32         /**
33          * 集团CIS号
34          * 客户注册时的归属编码
35          */
36         @NotBlank(message = "集团CIS号不能为空")
37         @JacksonXmlProperty(localName = "CIS")
38         private String cis;
39         /**
40          * 归属银行编号
41          * 客户注册时的归属单位
42          */
43         @NotBlank(message = "归属银行编号不能为空")
44         @JacksonXmlProperty(localName = "BankCode")
45         private String bankCode;
46         /**
47          * 证书ID
48          * 无证书客户可上送空
49          */
50         @JacksonXmlProperty(localName = "ID")
51         private String id;
52         /**
53          * 交易日期
54          * ERP系统产生的交易日期,格式是yyyyMMdd
55          */
56         @JacksonXmlProperty(localName = "TranDate")
57         private String tranDate;
58         /**
59          * 交易时间
60          * ERP系统产生的交易时间,格式如HHmmssSSS,精确到毫秒
61          */
62         @JacksonXmlProperty(localName = "TranTime")
63         private String tranTime;
64         /**
65          * 指令包序列号
66          * ERP系统产生的指令包序列号,一个集团永远不能重复
67          */
68         @NotBlank(message = "指令包序列号不能为空")
69         @JacksonXmlProperty(localName = "fSeqno")
70         private String sequence;
71     }
72     @Data
73     public static class In {
74         @JacksonXmlProperty(localName = "AccNo")
75         private String accountNo;
76         @JacksonXmlProperty(localName = "AreaCode")
77         private String areaCode;
78         @JacksonXmlProperty(localName = "MinAmt")
79         private String minAmount;
80         @JacksonXmlProperty(localName = "MaxAmt")
81         private String maxAmount;
82         @JacksonXmlProperty(localName = "BeginTime")
83         private String beginTime;
84         @JacksonXmlProperty(localName = "EndTime")
85         private String endTime;
86         @JacksonXmlProperty(localName = "NextTag")
87         private String nextTag;
88     }
89     @Override
90     public String toString() {
91         return XmlUtils.asString(this);
92     }
93 }

Java转XML代码:

 1 public static String beanToXml() {
 2         RootXml.Pub pub = new RootXml.Pub();
 3         pub.setTransCode("transCode");
 4         pub.setBankCode("bankCode");
 5         pub.setId("id");
 6         RootXml.In in = new In();
 7         in.setAccountNo("account");
 8         in.setAreaCode("areaCode");
 9         RootXml.Eb eb = new RootXml.Eb();
10         eb.setIn(in);
11         eb.setPub(pub);
12         RootXml rootXml = new RootXml();
13         rootXml.setEb(eb);
14         return XmlUtils.asString(rootXml);
15 }

转化结果

<CMD
    xmlns="">
    <eb>
        <pub>
            <TransCode>transCode</TransCode>
            <CIS/>
            <BankCode>bankCode</BankCode>
            <ID>id</ID>
            <TranDate/>
            <TranTime/>
            <fSeqno/>
        </pub>
        <in>
            <AccNo>account</AccNo>
            <AreaCode>areaCode</AreaCode>
            <MinAmt/>
            <MaxAmt/>
            <BeginTime/>
            <EndTime/>
            <NextTag/>
        </in>
    </eb>
</CMD>

 

XML转Java对象

<CMD
    xmlns="">
    <eb>
        <pub>
            <TransCode>transCode</TransCode>
            <CIS/>
            <BankCode>bankCode</BankCode>
            <ID>id</ID>
            <TranDate/>
            <TranTime/>
            <fSeqno/>
        </pub>
        <in>
            <AccNo>account</AccNo>
            <AreaCode>areaCode</AreaCode>
            <MinAmt/>
            <MaxAmt/>
            <BeginTime/>
            <EndTime/>
            <NextTag/>
        </in>
    </eb>
</CMD>

 XML转化为Java对象代码

 1 public static void xmlToBean(String xml) {
 2         XmlMapper xmlMapper = new XmlMapper();
 3         try {
 4             RootXml rootXml = xmlMapper.readValue(xml, RootXml.class);
 5             System.out.println();
 6             System.out.println(rootXml.toString());
 7         } catch (Exception e) {
 8             System.out.println("xml转Bean时发生错误:" + e.getMessage());
 9             throw new RuntimeException(e);
10         }
11 }

 

posted on 2023-07-11 10:29  VincentYew  阅读(1814)  评论(0编辑  收藏  举报

导航