【Java】Jackson解析xml的坑
为了获取xml数据,在spring mvc中针对 @ResponseBody配置了jackson。
刚⽤的时候内⼼是狂喜的,终于不⽤⾃⼰解析了…………
but…………………………还是有坑的……
坑⼀:⼤⼩写问题
@JacksonXmlProperty(localName = "Apid")
private Integer Apid;
private Integer getApid()
{
return this.Apid
}
把注解放在成员变量上⾯,会解析出两个apid字段,⼀个是<Apid></Apid>,另⼀个是<apid><apid>
这是因为Jackson的处理机制会⾃动从属性⽅法上获取成员变量名,然⽽在java中,要么以驼峰命名,要么前两个字母都⼤写,才能⽤get⽅法正确地获取属性,所以使⽤getApid获取的成员名称就是apid,被jackson解析了出来。⼜因为成员变量上也加了注解,所以也会被解析。这就造成了xml⽂件⽣成了两个apid标签。正确的做法是把注解写到get⽅法上⾯
正确写法:
private Integer Apid;
@JacksonXmlProperty(localName = "Apid")
private Integer getApid()
{
return this.Apid
}
坑⼆:Jackson封装list问题
这个问题排查的时候异常困难……开始以为是封装的问题…………(吐槽⼀下,这个外包项⽬使⽤⼤量xml交互,但是⼜⽤不了webservice就得按照固定格式解析封装改动也贼困难。。。)……最后还是确定了是jackson的问题
private List<Integer> APID;
@JacksonXmlProperty(localName = "APID")
@JacksonXmlElementWrapper(useWrapping = false)
public List<Integer> getAPID() {
return APID;
}
开始APID这个list⼀直被包装了两层!正确结果应该是<APID>111</APID>
java xml是什么但是得到的是<APID><APID>111</APID></APID>
问题出在JacksonXmlElementWrapper……………………如果不指定的话这个值默认是true………………………………………………………………………………………………
为true的时候Jackson封装xml直接⽤xmlProperty的localName⼜封了⼀层…把这⾥改成false就好了
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论