首页 > 其他分享 >Jackson用于Bean和XML之间转换

Jackson用于Bean和XML之间转换

时间:2023-07-11 10:34:05浏览次数:35  
标签:XML Jackson String private Bean localName RootXml JacksonXmlProperty

                                                    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 }

 

标签:XML,Jackson,String,private,Bean,localName,RootXml,JacksonXmlProperty
From: https://www.cnblogs.com/vincentYw/p/17543307.html

相关文章

  • bean的生命周期--容器关闭操作
         ......
  • readability-lxml 源码解析(三):`readability.py`
    #!/usr/bin/envpythonfrom__future__importprint_functionimportloggingimportreimportsysfromlxml.etreeimporttounicodefromlxml.etreeimport_ElementTreefromlxml.htmlimportdocument_fromstringfromlxml.htmlimportfragment_fromstringfrom......
  • bean基础配置-别名配置-作用范围配置
        ......
  • readability-lxml 源码解析(一)
    browser.pydefopen_in_browser(html):"""OpentheHTMLdocumentinawebbrowser,savingittoatemporaryfiletoopenit.Notethatthisdoesnotdeletethefileafteruse.Thisismainlymeantfordebugging."......
  • 使用CRM REST Builder的Predefined Query在js结合FetchXML语句进行查询
    一般情况下使用拓展工具RESTBuilder编辑器,可以很方便的进行操作js中增删改查均能实现,但在某些较为特殊的场景下,需要根据条件去拼接查询过滤条件的,使用编辑器生成的代码无法实现,需要结合使用fetchXML,比如某个条件多个值都查询需要使用in查询,再或者需要过滤关联表中的某个字段的值。......
  • Qt 读写XML文件
    Qt对XML的读写操作1、简介使用XML模块,在.pro文件中添加QT+=xml,并加如相应的头文件#include<QtXml>#include<QDomDocument>或者#include<QXmlStreamReader>QtXml模块提供了一个读写XML文件的流,解析方法包含DOM和SAX。(1)DOM(DocumentObjectModel):将XML文件表示成一......
  • Web开发|SpringBoot-Bean
    起因:经常在Config文件里看见Bean的存在,所以开始探究Bean的概念还使用方法。原文来自:https://gustavopeiretti.com/spring-boot-bean-annotation/#:~:text=What%20is%20%40Configuration%20in%20Spring,other%20parts%20of%20the%20application. 在SpringBoot中,@Bean是一个方......
  • Delphi12支持全屏显示启动界面的styles.xml
    <resourcesxmlns:android="http://schemas.android.com/apk/res/android"><stylename="AppTheme"parent="@android:style/Theme.Material.Light.NoActionBar"><itemname="android:navigationBarColor&qu......
  • spring的工具类BeanUtils.copyProperties 非基本数据类型时的坑
    复现前准备三个类,Student、Source、Target。Source和Target里面包含一个相同的非基本类型的字段(如下面示例中的stu字段)publicclassStudent{privateStringname;publicStudent(Stringname){this.name=name;}publicStringgetName(){......
  • mybatis: 正确使用mybatis中的mapperLocations配置多个xml扫描路径
    <!--myBatis文件--><beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"><propertyname="dataSource"ref="dataSource"/><!--自动扫描entity目录,省掉Configu......