JSONProvider возвращает пустые объекты, такие как String

Я использую классы JAXB и JSONProvider для генерации ответа клиенту в моих службах 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


person Andrew    schedule 27.06.2012    source источник


Ответы (1)


Согласно учебнику JAXB, отсутствие значения может быть выражена тремя различными способами:

  • элемент опущен
  • с пустой строкой, используя аннотацию @XmlElement(required = true)
  • с особым атрибутом xsi:nil с использованием аннотации @XmlElement(nillable = true)

Отвечая строго на ваш вопрос: JAXB не поддерживает перевод пустых объектов в null.

person Atticus    schedule 27.06.2012
comment
Также посмотрите на stackoverflow.com/questions/858598/ вопрос, который также показывает способ перевода пустых объектов. - person Atticus; 27.06.2012
comment
Спасибо! Но я думаю, что это неправильно, когда объект преобразуется в String. Парсер JSON клиента Android не работает. Потому что он ожидает Object, а не String. Подскажите пожалуйста, что мне делать в данной ситуации? - person Andrew; 27.06.2012
comment
Я не понимаю, что вы хотите сделать. Вы спросили Why does it happen?, я указал, почему это происходит. Вот как работает JAXB. Что бы вы хотели делать теперь? Пожалуйста, уточните свой вопрос. Кстати, String также является Object, поэтому ваш Android-клиент (о котором вы должны предоставить некоторую информацию, если это проблема) должен работать. - person Atticus; 27.06.2012
comment
Чтобы уточнить, @Andrew спрашивал о сценарии использования Android. Аттикус, спасибо за ответ. Я не хочу, чтобы объекты были пустыми, и я проверил, насколько это возможно, что они не пусты. Однако они отображаются как пустые, когда я ожидаю, что они будут заполнены. - person Foo; 01.03.2013