Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jackson XML全局设置容器类型的元素名称_Java_Xml_Xml Serialization_Jackson - Fatal编程技术网

Java Jackson XML全局设置容器类型的元素名称

Java Jackson XML全局设置容器类型的元素名称,java,xml,xml-serialization,jackson,Java,Xml,Xml Serialization,Jackson,我用的是Jackson 1.9.2。我需要调整Jackson序列化数组、列表和集合的方式 默认情况下,Jackson/XML使用名为myProperty的int数组属性(包含两个数字)生成以下内容: <myProperty> <myProperty>1</myProperty> <myProperty>2</myProperty> </myProperty> 然而,这个解决方案需要我手动将这些注释应用于POJO中的

我用的是Jackson 1.9.2。我需要调整Jackson序列化数组、列表和集合的方式

默认情况下,Jackson/XML使用名为
myProperty
的int数组属性(包含两个数字)生成以下内容:

<myProperty>
  <myProperty>1</myProperty>
  <myProperty>2</myProperty>
</myProperty>
然而,这个解决方案需要我手动将这些注释应用于POJO中的每个数组、列表和集合。一个更好的解决方案将允许我对所有数组、列表和集合类型应用一次全局解决方案。关于如何实施这样的解决方案,有什么想法吗


谢谢

您可以对XML模块提供的
AnnotationIntrospector
进行子类化,并重写检查
@JacksonXmlElementWrapper
的方法,使其返回您想要的任何包装名称。

我最终创建了自己的
JsonGenerator
来为我的组需要支持的旧格式生成XML


我希望使用Jackson XML dataformat模块,它提供了更多的安全性,经过更多的测试,并且可能更快。不幸的是,我无法利用斯塔克斯曼的建议找到解决方案。

我喜欢这种方法。有没有线索告诉我如何对
@JacksonXmlProperty(localName='item')
执行相同的操作?是的,该注释也通过
AnnotationIntrospector
进行处理,因此您可以重写它。很抱歉过于密集-我知道可以使用
findSerializablePropertyName
执行此操作,但我不能简单地返回
“item”
从该方法:当上下文位于非映射容器类型(列表、数组或集合)内时,我需要有选择地返回
“item”
。以这种方式调节
findSerializablePropertyName
是我不知道该怎么做的。您传递的对象可以强制转换为实际的
AnnotatedField
AnnotatedMethod
,这样您就可以更方便地查看它是否匹配。但是,根据您的需要,可能没有足够的信息。不幸的是,我没有找到一种简单的方法来获取我需要的信息,以使此可行-再次感谢您的建议。这是不幸的,但可以理解。还有一个建议:如果要传递数据绑定,还必须使用原始的Stax(XML)api(请参见
javax.XML.stream.XMLStreamWriter
)。它用于内容生成相对简单、高效(如果需要多个编写器,请记住重用
XMLOutputFactory
),谢谢您的建议。为什么有必要使用?在我的
JsonGeneratorBase
子类中,我只是将
String
s写入一个流。我强烈建议任何人不要使用字符串写入来编写XML——这不会处理“有趣字符”的转义。XMLStreamWriter通常也比字符串连接快。
<myProperty>
  <item>1</item>
  <item>2</item>
</myProperty>
@JacksonXmlElementWrapper(localname='myProperty')
@JacksonXmlProperty(localname='item')
public int[] myProperty;