java使用Jackson API和JAXB注释将JSON转换为XML,反之亦然
我正在尝试编写一个代码,它可以分别接受XML或JSON输入和输出JSON或XML。也就是说,如果我给出XML,它应该返回JSON,如果我给出JSON,它应该给出XML输出
有人告诉我,使用jacksonapi和JAXB注释可以做到这一点。有人能帮我解决这个问题吗
你可以在下面搜索框中键入要查询的问题!
我正在尝试编写一个代码,它可以分别接受XML或JSON输入和输出JSON或XML。也就是说,如果我给出XML,它应该返回JSON,如果我给出JSON,它应该给出XML输出
有人告诉我,使用jacksonapi和JAXB注释可以做到这一点。有人能帮我解决这个问题吗
# 1 楼答案
当然可以,但不要认为这是在XML和JSON之间进行转换——这几乎是错误的做法,会导致兼容性问题,但会导致Java对象(POJO)与JSON和XML之间的转换。您可以使用一两种工具来实现这一点:一种常见的组合是使用Jackson来表示JSON,使用JAXB来表示XML,以利用它们各自的优势
也可以使用单个工具;Blaise解释了JAXB实现如何提供帮助。 类似地,您可以同时使用Jackson:对于XML部分,您需要使用Jackson XML module。 对于Jackson,您可以使用Jackson自己的注释(首选),或JAXB注释以实现兼容性;两者都适用于XML和JSON用例
在Jackson中使用XML模块与默认的JSON处理没有太大区别,只是需要
ObjectMapper
的XmlMapper
子类。 如果从JAX-RS(比如Jersey)使用它,可以使用Jackson JAX-RS XML provider# 2 楼答案
注意:我是EclipseLink JAXB (MOXy)领导和JAXB (JSR-222)专家组成员
下面是一个如何使用MOXy的JSON绑定来支持此用例的示例
JAVA模型
下面是一个用JAXB元数据注释的域模型示例。相同的元数据将用于对象到XML和对象到JSON的转换
客户
电话号码
XML输入
下面是我们将使用的XML输入。请注意
xsi:nil
属性是如何在lastName
元素上用于指示null
值的。还要注意phoneNumbers
元素如何具有type
属性演示代码
jaxb。属性
要将MOXy指定为JAXB提供程序,您需要在与域模型相同的包中包含一个名为
jaxb.properties
的文件,并带有以下条目(请参见:http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html):演示
下面的演示代码将XML转换为域模型,然后再转换回JSON
JSON输出
请注意
lastName
键的null
值如何表示为正确的JSON。还要注意type
键如何不包含任何与之对应的特殊指示符,该指示符是XML表示中的XML属性