2017-01-06 3 views
3

Я довольно новыми для Jackson, но я наткнулся на следующую проблему:Джексон: Сериализация поля объекта в массив

Я хотел бы сериализовать простой объект в массив его полей. Так, учитывая следующий класс:

public class UserModel { 
    private String id; 
    private String firstName; 
    private String lastName; 
    private String email; 
    private String company; 
} 

я получаю следующее:

JSON
{ 
    "id":"cec34b58", 
    "firstName":"foo", 
    "lastName":"bar", 
    "email":"[email protected]", 
    "company":"FooBar" 
} 

Но что я хотел бы это следующим образом:

[ 
    "cec34b58", 
    "foo", 
    "bar", 
    "[email protected]", 
    "FooBar" 
] 

Я хотел бы избежать используя custom serializer, если есть более простой способ. Читая Jackson Annotations, я не сразу вижу то, что позволяет сразу преобразовать модель. Google советует только сериализовать Java Collections на json, но нечего делать с Java Object в массив json.

ответ

4

Это не требует пользовательских сериализаторы но простой аннотацию:

@JsonFormat(shape=JsonFormat.Shape.ARRAY) 
public class UserModel { 
    // ... 
} 
+1

Вау, это круто, не знал об этом – Ivan

+1

рад, что смог помочь! Я бы хотел, чтобы это стало лучше известно, это действительно опрятно для некоторых случаев использования; может сжимать размеры сообщений для тесно связанных систем. – StaxMan

1

Ваша схема довольно обычная, поэтому вам придется делать через пользовательскую сериализацию.

Также обратите внимание, что я предлагаю вам пересмотреть его, так как добавление/удаление нового поля/изменение порядка было бы намного сложнее в этом случае, особенно если вы не можете одновременно выпускать как клиент, так и сервер.

0

Вы можете добавить метод ToList() и fromList() на вашем классе UserModel, который преобразует ваш класс в/из списка. Вместо сериализации вашего объекта UserModel с помощью Jackson вы сериализуете список.

Смежные вопросы