JSONProvider 返回空对象,例如 String。

3

我在我的REST服务中使用JAXBJSONProvider类为客户端生成响应。我发现了一件有趣的事情。

我有如下的映射:

@XmlRootElement(name = "fooRoot")
@XmlAccessorType(XmlAccessType.FIELD)
public class WSBar {
     private WSFooTO foos;
//...
}

@XmlRootElement(name = "foos")
@XmlAccessorType(XmlAccessType.FIELD)
public class WSFooTO {
    private WSDateTO one;
    private WSDateTO two;
    private WSDateTO three;
    private WSDateTO four;
//....
}

当我设置响应为空对象时,我指的是:只有new WSDateTO()new WSFooTO()。 然后,我收到了如下回答:

{"fooRoot":{
    "foos":{
        "one":"",
        "two":"",
        "three":"",
        "four":""
    }
}}

为什么会出现这种情况?我期望的是:"one":null,"two":null。
1个回答

2
根据JAXB tutorial,缺少值可以用三种不同的方式表示:
  • 省略该元素
  • 使用@XmlElement(required = true)注释并使用空字符串
  • 使用@XmlElement(nillable = true)注释和特殊的xsi:nil属性
严格回答您的问题:JAXB不支持将空对象翻译为null

还可以查看https://dev59.com/RHRA5IYBdhLWcg3wsgPq问题,该问题还展示了一种翻译空对象的方法。 - Atticus
谢谢!但我认为,当对象转换为字符串时是错误的。Android客户端的JSON解析器无法工作。因为它期望的是对象,而不是字符串。您能告诉我在这种情况下该怎么办吗? - Andry
我不明白你想做什么。你问了“为什么会发生这种情况?”我指出了它发生的原因。这就是JAXB的工作方式。现在你想做什么?请澄清你的问题。顺便说一下,“String”也是一个“Object”,所以你的Android客户端(如果这是问题,你应该提供一些信息)应该可以工作。 - Atticus
澄清一下,@Andrew 是在询问 Android 的使用情况。Atticus,感谢您的回复。我并不打算让这些对象为空,并且我已经尽力验证它们不是空的。然而,当我期望它们被填充时,它们却显示为空。 - Foo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接