首页 > 其他分享 >jackson解析xml坑点

jackson解析xml坑点

时间:2024-05-21 16:57:33浏览次数:19  
标签:xml jackson 坑点 private Apid localName 解析

为了获取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就得按照固定格式解析封装xml.....改动也贼困难。。。)……最后还是确定了是jackson的问题

private List<Integer> APID;

@JacksonXmlProperty(localName = "APID")
@JacksonXmlElementWrapper(useWrapping = false)
public List<Integer> getAPID() {
return APID;
}

开始APID这个list一直被包装了两层!正确结果应该是<APID>111</APID>

但是得到的是<APID><APID>111</APID></APID>

问题出在JacksonXmlElementWrapper……………………如果不指定的话这个值默认是true………………………………………………………………………………………………

为true的时候Jackson封装xml直接用xmlProperty的localName又封了一层…

把这里改成false就好了

标签:xml,jackson,坑点,private,Apid,localName,解析
From: https://www.cnblogs.com/paimianbaobao/p/18204470

相关文章

  • Android查看apk安装包的AndroidManifest.xml文件
    Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解`Android查看apk安装包的AndroidManifest.xml文件日期:2020-4-19阿珏折腾代码浏览:946次评论:5条起因上周在做安卓系统的厂家推送功......
  • Jackson 库中@JsonProperty和@JsonAlias注解实现序列化反序列化
    Json序列化一般为实体转化生成的JSON数据中直接包含嵌套对象的属性ObjectMappermapper=newObjectMapper();Bookbook=newBook("LearningJava","Java");Writerwriter=newWriter(110,"Mohit",book);StringjsonWriter=......
  • [NCTF2019]True XML cookbook
    [NCTF2019]TrueXMLcookbook打开环境是之前一道题的登录框先按原来那道题的payload进行测试,payload和结果如下:<?xmlversion="1.0"?><!DOCTYPEllw[<!ENTITYfileSYSTEM"file:///flag">]><user> <username>&file;</username> ......
  • XML Schema 复杂元素类型详解:定义及示例解析
    在XMLSchema(XSD)中,复杂元素是指包含其他元素和/或属性的XML元素。复杂元素可以分为四种类型:空元素:仅包含其他元素和/或属性的元素。仅包含其他元素的元素:不包含文本内容,只包含其他子元素的元素。仅包含文本的元素:不包含其他子元素,只包含文本内容的元素。既包含其他元素......
  • 关于IDEA使用xml实现动态sql的问题
     如上图,我在mapper层编写了一个list方法用于实现动态sql。1.导入使用xml文件的mybatis依赖。 2.配置文件的修改.properties .yml mybatis.mapper-locations=classpath:mapper/*.xml:这个配置项指定了MyBatis映射器XML文件的位置。值classpath:mapper/*.xml......
  • qt的xml读取和使用
    将数据保存文件QByteArrayfileAsByteArray;QFilefile(filename);if(!file.open(QIODevice::WriteOnly)){qDebug()<<"文件未打开.";}file.write(fileAsByteArray);file.close();读取文件QByteArraybyteArray=file.readAll();使用xml分析文件QXmlStre......
  • OPCUA NodeSet XML 下载地址
    官网下载reference.opcfoundation.org/nodesets有各个模型的下载网址 2、GitHub GitHub-OPCFoundation/UA-Nodeset:UANodeset    完整的文件,文件名称——PLCModelbasedonIEC61131-3_1172761404.xml<?xmlversion="1.0"encoding="utf-8"?><!--......
  • qt的xml类型
    QXmlStreamReader::TokenTypetoken=reader.readNext();是Qt的XML流读取器类的一个常见用法。它的作用是:QXmlStreamReader从XML流中读取下一个token。QXmlStreamReader::TokenType是一个枚举类型,定义了XML流中可能出现的不同类型的token,包括:NoToken:表示没有读取......
  • 前后端分离,提供蜘蛛爬行最简单方案,创建sitemap xml
    2024年5月13日11:36:01现在很多项目是vuereactangular开发的,但是百度爬虫对这样的项目支持不好,很多时候回去采用一些服务器端渲染(SSR)和静态站点生成(SSG),当然有些框架支持ssr和ssg效果不好,还有些想不不破坏项目自身的提前下的方案呢?很多年前接手一个angularjs的项目,但是......
  • 从XML配置角度理解Spring AOP
    本文分享自华为云社区《Spring高手之路18——从XML配置角度理解SpringAOP》,作者:砖业洋__。1.SpringAOP与动态代理1.1SpringAOP和动态代理的关系SpringAOP使用动态代理作为其主要机制来实现面向切面的编程。这种机制允许Spring在运行时动态地创建代理对象,这些代理对象包......