2011-12-23 13 views
2

POJOクラスをシリアル化したいとき、出力をXMLに生成するとき、私が望むように完璧に動作します。 JSONではなくjacksonでジェネリック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クラス:XML用

@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;} 

} 

結果:

<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" 
    } 
    } 
}} 

問題は、どのようにJSONのために「の項目を」オブジェクトを削除するのですか?結果はXMLと似ています。あなたはXMLとJSONのためのジャクソンのためにJAXBを利用しているよう

答えて

1

が見える前に

本当にありがとうございました。

を使用すると、ジェネリック型の定義を渡す必要があるかもしれませんhttp://wiki.fasterxml.com/JacksonInFiveMinutes#Data_Binding_with_Genericsを見てみましょう。

ResultDataRowTestでJackson注釈を指定する必要があります。

+0

そうです、私は春を使って休憩サービスを作成します。だから私は戻り値/応答のPOJOクラスを作成する必要があります。これまではXMLで動作します。まだjacksonでJSONを探しています。返信いただきありがとうございます。 – iJusran

+0

jacksonアノテーションを指定することで何を意味するのか説明できますか? – iJusran

1

まず第一に、私はあなたが本当にJSONとXMLが似ているかどうかをあまり気にする必要はないと思う - 彼らは別の論理モデル(階層対オブジェクト)と異なるフォーマットであり、異なるツールで使用します。 2つが少し違って見えることは間違いありません。理想的には、フォーマット自体(つまり、クリーンなXMLとクリーンなJSON)の両方に適しています。

しかし、「アイテム」へのように:あなたはアクセサ(のgetItem())を持っている場合、それはあるでしょう。あなたがそれを望まないなら、あなたの構造を平らにすることができます。あなたが本当にそれのいずれかを使用することはありませんので、あなたは、ジェネリック型パラメータTを使用している理由も

、私は知りません。タイプとしてObjectを使用することもできます。本当に傷つけるべきではない、ちょうどそれがこの場合有用ではないように言っている。

+0

あなたの答えに感謝します。私はXMLとJSONの**応答**返答を行うドキュメンテーションを心配しています。上の例では、 'T'オブジェクトは' RetUser.class'のためだけに受信しますが、実際のコードでは、私のpojoクラスの大半を受け取ります。 – iJusran

+0

こんにちは@StaxMan、私は 'item'オブジェクトに@JsonUnwrapedを使ってみましたが、それはうまくいきません。おそらく、XMLとJSONの両方に対する応答が常に同じではないという現実を受け入れる必要があります。あなたの考えをありがとう – iJusran

関連する問題