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) 编辑 收藏 举报