使用eclipselink.media-type值设置Marshaller属性时的PropertyException:application / json

我试图按照这里的示例,但得到一个javax.xml.bind.PropertyException。 由于以下代码行,我收到此exception:

marshaller.setProperty("eclipselink.media-type", "application/json"); 

我已经完全复制/粘贴了上面列出的示例,因此我的代码正是您在那里看到的。 搜索SO和谷歌对此没什么帮助,并且认为我会把这些带给SO的天才以获得一些帮助。 任何帮助都会受到最高的赞赏,(de)使用JSON和XML与json.org,Jackson和JAXB进行序列化已经变成了一个消耗了近一个月生命的黑色和无底洞。

我的第一印象是我没有正确指定eclipselink运行时(如此处所述),但没有产生解决方案。

堆栈跟踪:

 Exception in thread "main" javax.xml.bind.PropertyException: name: eclipselink.media-type value: application/json at org.eclipse.persistence.jaxb.JAXBMarshaller.setProperty(JAXBMarshaller.java:528) at com.dualoutput.DualOutput.main(DualOutput.java:20) 

SSCCE

您需要确保使用EclipseLink 2.4.0或更高版本。 当前版本是2.5.0,可以从(或从Maven Central获得)下载:


UPDATE

MOXy还提供以下便捷类来访问扩展属性:

  • org.eclipse.persistence.jaxb.JAXBContextProperties
  • org.eclipse.persistence.jaxb.MarshllerProperties
  • org.eclipse.persistence.jaxb.UnmarshallerProperties

这意味着您可以执行以下操作:

 marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/json");