2016-07-29 8 views
1

GENSONを使用している間、継承が機能していません。以下のサンプルコード構造を見つけてください。Genson 1.4(JSON)が継承しているPojoを処理していません

これはこれはこれはこれはGENSON JSON出力である私のレスポンスオブジェクト

public class ResponseObject implements Serializable 
{ 
private Integer errorCode; 
private String errorMessage; 
private Long primaryKey; 

private SynBaseObject baseClass; 

public ResponseObject() 
{ 

} 

public SynBaseObject getBaseObject() 
{ 
return baseClass; 
} 

public void setBaseObject(SynBaseObject baseClass) 
{ 
this.baseClass = baseClass; 
} 

public Integer getErrorCode() 
{ 
return errorCode; 
} 

public void setErrorCode(Integer errorCode) 
{ 
this.errorCode = errorCode; 
} 

}

ある

public class PhoneNumber extends SynBaseObject 
{ 
private String  countryCode; 
private String  areaCode; 
private String  localNumber; 
//GettersAndSetters 
} 

私の子クラスである私のBaseObject

This is my BaseObject 

public class SynBaseObject implements Serializable 
{ 
private Long status; 
//GettersAndSetters 
} 

です:

{ "baseObject":{ "ステータス":NULL} "のerrorCode":ヌル "にErrorMessage":NULL、 "主キー":ヌル}

CountryCodeareaCodelocalNumberが欠落していますJSONでは、基本クラスのみが処理されます。同じようなコードから試しました。

Genson genson = new Genson(); 
    PhoneNumber number = new PhoneNumber(); 
    number.setCountryCode("2"); 
    number.setAreaCode("3"); 
    number.setLocalNumber("9645"); 
    ResponseObject responseObject = new ResponseObject(); 
    responseObject.setBaseObject(number); 
    String serialize = genson.serialize(responseObject); 
    System.out.println(serialize); 

出力は残りのサービスと同じです。

答えて

0

デフォルトでは、Gensonはser/deの間に静的タイプを使用します。つまり、オブジェクトはSynBaseObjectのインスタンスであり、具体的なタイプのPhoneNumberではありません。

あなたは、コンフィギュレーションを経由して実行時の型を使用するようにGensonを伝えることができます。

Genson genson = new GensonBuilder().useRuntimeType(true).create(); 

ここでは、customize Genson with Jaxrsする方法についていくつかの例を見つけることができます。

ResponseObjectを逆シリアル化する必要がある場合は、jsonのように基本オブジェクトの具体的な種類が何であるかについての情報がない可能性があります。しかし消費されたjsonもGensonによって生成されている場合は、クラスメタデータのシリアル化builder.useClassMetadata(true)を有効にすることでこの問題を簡単に解決できます。

Gensonのhandling of polymorphicタイプについてさらにいくつかのドキュメント。

+0

レスポンスありがとうございました。コードからの操作.how。私のレストサービスで.useRuntimeType(true)を設定することができます.Genson 1.4 jarを使用しているだけです。シリアライズとデシリアライゼーションはjavax.ws.rsで処理されます。 gensonライブラリを使用する –

+0

サービスのgensonインスタンスを設定するには、http://owlike.github.io/genson/Documentation/Extensions/#jax-rs-jersey--cieのドキュメントを参照してください。あなたがそれを行う方法のコードスニペットを見ることができます。このようにhttp://stackoverflow.com/questions/38107426/what-is-a-contextresolver-and-provider-in-jersey/38112074#38112074 – eugen

関連する問題