【发布时间】:2018-04-18 23:05:49
【问题描述】:
我有一个使用 Jersey 提供 REST 服务的 Java 应用程序。我有几个 REST 端点,所有这些端点都返回有效的 JSON(所需的格式)。我们有一个新的端点,一个 GET,它返回有效的 JSON,除了一个元素,一个 Java 矩形。这是我们得到的响应:
[
{
"customers": {
"current": 2,
"max": 16
},
"format": "ABCD",
"dataPoints": 20,
"window": "java.awt.Rectangle[x=50,y=50,width=400,height=300]"
}
]
如您所见,该 Rectangle 不是有效的 JSON。我已经尝试了几件事,但都没有奏效。我尝试过的方法包括在类的 Rectangle 元素上添加 @XmlRootElement、@XmlElement 和 @XmlAttribute。唯一要做的就是将格式错误的 JSON 移到输出的顶部。
我怀疑它不起作用,因为 Rectangle 类在其类声明中没有 @XmlRootElement,因此 JAXB 无法正确将其转换为 XML(然后转换为 JSON)。如果是这种情况,我是否需要从 Rectangle 继承以包含该注释?似乎 JAXB 开发人员会考虑内置类型。我的假设是否正确,还是有其他解决方案?
【问题讨论】:
-
您需要为
java.awt.Rectangle创建一个XmlAdapter。见this article。 -
谢谢,@ThomasFritsch。我精确地复制了这个例子,现在
window显示为一个空数组。那是错误的,但我真的不知道如何调试这个错误。 -
我需要将所有的 setter 添加到替代类(文章没有提到这些)。添加它们后,一切正常! @ThomasFritsch,如果您将第一个回复变成答案,我会将其标记为解决方案。 :)