У меня есть два объекта, опрос и информация.Как заказать хешсет в Джексоне? @JsonPropertyOrder не работает
Survey Entity:
@RooJavaBean
@RooToString
@RooJpaActiveRecord(table = "information")
@JsonPropertyOrder({ "seq"})
public class Information {
@NotNull
private String title;
@ManyToOne(fetch = FetchType.LAZY)
@JsonBackReference
private Survey survey;
private int seq;
}
Информация Entity:
@RooJavaBean
@RooToString
@RooJpaActiveRecord(table = "survey")
public class Survey {
@NotNull
@Size(min = 3, max = 50)
private String title;
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy="survey")
@JsonManagedReference
private Set<Information> informations = new HashSet<Information>();
}
Я использовал Джексон сериализацию.
Что я ожидаю:
{
"survey" : {
"title" : "Medical Survey",
"informations" : [ {
"id" : 1,
"seq" : 0,
"title" : "Name:",
"version" : 0
}, {
"id" : 2,
"seq" : 1,
"title" : "Age:",
"version" : 0
}, {
"id" : 3,
"seq" : 2,
"title" : "test",
"version" : 0
}, {
"id" : 4,
"seq" : 3,
"title" : "test",
"version" : 0
} ],
"id" : 1,
"version" : 134
}
}
Но что это выходит:
{
"survey" : {
"title" : "Medical Survey",
"informations" : [ {
"id" : 2,
"seq" : 1,
"title" : "Age:",
"version" : 0
}, {
"id" : 4,
"seq" : 3,
"title" : "test",
"version" : 0
}, {
"id" : 3,
"seq" : 2,
"title" : "test",
"version" : 0
}, {
"id" : 1,
"seq" : 0,
"title" : "Name:",
"version" : 0
} ],
"id" : 1,
"version" : 134
}
}
- Я знаю, что, используя список должен быть более подходящим в данном случае, но Spring Roo не может список поддержки в эшафоте. Поэтому я использовал HashSet с номером seq в нем.
- Я также знаю, что я могу создать список массива информации, который будет @transient, а затем клонировать и сортировать его в бизнес-слое.
Но я хотел бы знать, есть ли какое-либо более чистое решение, то есть заказывать при сериализации. Благодарю.
Это означает, что HashSet не может быть сериализован в порядке с использованием Джексона, я прав? –
У Джексона нет контроля над заказом Set, будь то HashSet, TreeSet или любая другая реализация Set. @JsonPropertyOrder предназначен для заказа свойств Json объекта (и карты в меньшей степени), а не для массива. Вы просто не можете контролировать порядок объектов в HashSet, это часть его дизайна. –
Получил это. Большое спасибо!! –