【问题标题】:JSONProvider returns empty objects such as StringJSONProvider 返回空对象,例如 String
【发布时间】:2012-06-27 10:21:46
【问题描述】:

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

@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

【问题讨论】:

    标签: java json rest jaxb cxf


    【解决方案1】:

    根据 JAXB tutorial,值的缺失可以用三种不同的方式表示:

    • 元素被省略
    • 使用@XmlElement(required = true)注解的空字符串
    • 带有特殊的xsi:nil 属性,使用@XmlElement(nillable = true) 注释

    严格回答您的问题:JAXB 不支持将空对象转换为null

    【讨论】:

    • 另请参阅stackoverflow.com/questions/858598/… 问题,该问题还显示了一种翻译空对象的方法。
    • 谢谢!但我认为,当对象转换为字符串时,这是错误的。 Android 客户端的 JSON 解析器不起作用。因为它需要对象,而不是字符串。请问一下,这种情况我该怎么办?
    • 我不明白你想做什么。你问Why does it happen? 我指出了为什么会这样。这就是 JAXB 的工作方式。你现在要做什么?请澄清你的问题。顺便说一句,String 也是 Object,所以你的 Android 客户端(如果这是问题,你应该提供一些信息)应该可以工作。
    • 澄清一下,@Andrew 是在询问 Android 用例。阿蒂克斯,谢谢你的回复。我不打算让这些对象为空,并且我已尽我所能验证它们不是空的。但是,当我希望它们被填充时,它们显示为空。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-29
    • 2015-02-11
    • 2020-12-21
    相关资源
    最近更新 更多