2016-07-29 1 views
1

Я использую genson 1.4 для обработки JSON в моей реализации REST, JSON Inheritance не работает при использовании genson .please найдите структуру кода кода ниже.Genson 1.4 (JSON) не обрабатывает унаследованные Pojo's

Это мой BaseObject

This is my BaseObject 

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

Это мой ребенок Класс

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

Это мой объект Response

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

}

Это выход GENSON JSON :

{ "BaseObject": { "статус": нулевой}, "ERRORCODE": нулевой, "ErrorMessage": нулевой, "PrimaryKey": нулевой}

CountryCode, areaCode и localNumber отсутствует в формате JSON, только базовый класс обрабатывается .Tried же от кода, как этот

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).

Дополнительная документация о типах handling of polymorphic в Генсоне.

+0

Спасибо за ответ, его работа с кодом. Могу ли я настроить .useRuntimeType (true) в моем сервисе отдыха, так как я просто использую Jens Genson 1.4, сериализацию и де-сериализацию обрабатывает javax.ws.rs используя библиотеку genson –

+0

Чтобы настроить экземпляр genson для ваших служб, посмотрите на документы здесь http://owlike.github.io/genson/Documentation/Extensions/#jax-rs-jersey--cie, есть также некоторые вопросы о stackoverflow, где вы можете увидеть фрагмент кода о том, как это сделать. Как этот http://stackoverflow.com/questions/38107426/what-is-a-contextresolver-and-provider-in-jersey/38112074#38112074 – eugen