2012-01-17 3 views
1

Я хотел бы переключиться с Xstream на Jackson для сериализации/десериализации объектов на сервере Restlet. Если я использую XSTREAM библиотеки для:Restlete XStream/Jackson different JSON wrapper

@Get("json") 
public Profile retrieve() { 

    Profile prf = new Profile (...); 

    ... 

    return prf; 
} 

я хотел бы получить что-то вроде:

{"Profile":{"id": 1, "name": "jack" ... }} 

в то время как с Джексоном я получаю только:

{"id": 1, "name": "jack" ... } 

Как я могу получить тот же JSON с Джексоном ? Мне нужно было бы это для объектов KVC в моем клиенте (в противном случае мне нужно будет указывать сопоставления вручную)

У меня такая же проблема, если я возвращаю ArrayList < Профиль>, jackson не переносит список профилей при сериализации и JSON вместо

{Profile:[{firstProfile}, {secondProfile}]} 

это выглядит следующим образом:

[{firstProfile}, {secondProfile}] 

я также был также пытается использовать Джексон аннотаций:

@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.WRAPPER_OBJECT) 
public class MyProfileServerResource extends ServerResource { 

но мне кажется, что это не интерпретируется Restlet

ответ

0

правильное место для аннотирования в классе профиля:

@JsonTypeInfo(use=JsonTypeInfo.Id.NAME, include=JsonTypeInfo.As.WRAPPER_OBJECT) 
public class Profile extends Element implements Serializable { 

и JSON теперь выглядит следующим образом:

{"Profile":{ ... }} 

и возвращаемый тип является подклассом:

public class ProfileList extends ArrayList<Profile> 
{} 

см. http://wiki.fasterxml.com/JacksonPolymorphicDeserialization 5.1