1
我有兩個實體,調查和信息。如何在Jackson中訂購hashset? @JsonPropertyOrder沒有工作
調查實體:
@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;
}
信息實體:
@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的不能腳手架支持列表。因此,我在其中使用了一個seq編號的HashSet。
- 我也知道我可以創建一個數組信息列表@transient,然後克隆 並在業務層中進行排序。
但我想知道是否有更清潔的解決方案,即序列化時排序。謝謝。
這意味着HashSet無法按照使用Jackson的順序排列,對嗎? – 2013-03-27 16:01:29
Jackson無法控制Set的順序,無論是HashSet,TreeSet還是任何其他Set實現。 @JsonPropertyOrder用於排序對象(和映射的程度較低)的Json屬性,而不是Array。你根本無法控制HashSet中對象的順序,這是它設計的一部分。 – 2013-03-27 17:00:54
明白了。非常感謝!! – 2013-03-27 17:25:14