Сериализация Generic JSON с Джексоном - PullRequest
2 голосов
/ 23 декабря 2011

Я хочу сериализовать свой класс POJO, когда выдает вывод в XML, он отлично работает как то, что я хочу.Но не для JSON.

Мой основной класс POJO

@XmlRootElement(name="result")
@XmlSeeAlso({ResultDataRowItemTest.class})
public class ResultDataRowTest {
   private ResultDataRowItemTest response;

   public ResultDataRowTest() {}

   public ResultDataRowItemTest getResponse() {return response;}

   public void setResponse(ResultDataRowItemTest pst) {this.response = pst;}

}

ResultDataRowItemTest класс:

public class ResultDataRowItemTest<T> {
   private T item;

   public ResultDataRowItemTest() {}

   @JsonTypeInfo(use=Id.NAME, include=As.WRAPPER_OBJECT)
   @XmlElements({
   @XmlElement(name="user", type=RetUser.class)
   })
   public T getItem() {return item;}

   public void setItem(T pst) {this.item = pst;}
}

Класс RetUser:

@JsonTypeName("user")
@XmlRootElement(name="user")
public class RetUser {
   private int userID;
   private String userName;
   private String firstName;
   private String lastName;

   public String getUserName() {return userName;}
   public void setUserName(String userName) {this.userName = userName;}

   public int getUserID() {return userID;}
   public void setUserID(int userID) {this.userID = userID;}

   public String getFirstName() {return firstName;}
   public void setFirstName(String firstName) {this.firstName = firstName;}

   public String getLastName() {return lastName;}
   public void setLastName(String lastName) {this.lastName = lastName;}

}

Результатдля XML:

<result>
  <response>
    <user>
        <firstName>John</firstName>
        <lastName>Pantau</lastName>
        <userID>5</userID>
        <userName>JohnP</userName>
    </user>
  </response>
</result>

Вот результат для JSON:

{"response":{
  "item":{
    "user":{
        "userID":5, 
        "userName":"JohnP", 
        "firstName":"John", 
        "lastName":"Pantau"
    }
  }
}}

Проблема в том, как удалить объект "item" для JSON?Так что результат так же, как XML.

Огромное спасибо, прежде чем

Ответы [ 2 ]

1 голос
/ 23 декабря 2011

Прежде всего, я не думаю, что вам действительно нужно заботиться о том, похожи ли JSON и XML - они имеют разные форматы с разными логическими моделями (объект против иерархии) и используются с разными инструментами. Двое прекрасно выглядят немного по-разному, в идеале оба выглядят хорошо для самого формата (т. Е. «Чистый XML» и «чистый JSON»).

Но что касается 'item': он будет там, если у вас есть аксессор (getItem ()). Если вы не хотите этого, вы можете сгладить свою структуру.

Кроме того, я не знаю, почему вы используете параметр универсального типа T, поскольку вы на самом деле его не используете. С таким же успехом можно использовать Object как тип. Не должно быть больно, просто сказать, что это не кажется полезным в этом случае.

1 голос
/ 23 декабря 2011

Похоже, вы используете JAXB для XML и Джексона для JSON.

Взгляните на http://wiki.fasterxml.com/JacksonInFiveMinutes#Data_Binding_with_Generics, возможно, вам потребуется передать определение общего типа.

Вам необходимо указать аннотацию Джексона в ResultDataRowTest.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...