Рестлет XStream / Джексон другой JSON обертка - PullRequest
1 голос
/ 17 января 2012

Я бы хотел переключиться с Xstream на Джексона для сериализации / десериализации объектов на сервере Restlet.Если бы я использовал библиотеки Xstream для:

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

    Profile prf = new Profile (...);

    ...

    return prf;
}

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

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

, тогда как с Джексоном я получу только:

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

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

У меня та же проблема, если я возвращаю ArrayList , Джексон не переносит список профилей, когдаСериализованный и JSON вместо

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

выглядит так:

[{firstProfile}, {secondProfile}]

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

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

, нопохоже это не интерпретируется рестлетом

1 Ответ

0 голосов
/ 18 января 2012

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

@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

...