使用Jackson的ObjectMapper的JSON对象的顺序

我使用ObjectMapper来执行我的java-json映射。

ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter(); ow.writeValue(new File( fileName +".json"), jsonObj); 

这是我的Java类:

 public class Relation { private String id; private String source; private String target; private String label; private List<RelAttribute> attributes; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getSource() { return source; } public void setSource(String source) { this.source = source; } public String getTarget() { return target; } public void setTarget(String target) { this.target = target; } public String getLabel() { return label; } public void setLabel(String label) { this.label = label; } public void setAttributes(List<RelAttribute> attributes) { this.attributes = attributes; } public List<RelAttribute> getAttributes() { return attributes; } } 

这是我得到的:

 { "id" : "-75da69d3-79c8-4000-a3d8-b10350a57a7e", "attributes" : [ { "attrName" : "ID", "attrValue" : "" }, { "attrName" : "Description", "attrValue" : "Primary Actor" }, { "attrName" : "Status", "attrValue" : "" } ], "label" : "new Label", "target" : "-46b238ac-b8b3-4230-b32c-be9707f8b691", "source" : "-daa34638-061a-45e0-9f2e-35afd6c271e0" } 

所以我现在的问题是,我怎样才能得到这个JSON输出:

 { "id" : "-75da69d3-79c8-4000-a3d8-b10350a57a7e", "label" : "new Label", "target" : "-46b238ac-b8b3-4230-b32c-be9707f8b691", "source" : "-daa34638-061a-45e0-9f2e-35afd6c271e0", "attributes" : [ { "attrName" : "ID", "attrValue" : "" }, { "attrName" : "Description", "attrValue" : "Primary Actor" }, { "attrName" : "Status", "attrValue" : "" } ] } 

我想要它与我的java声明中的顺序相同。 有没有一种方法来指定它? 也许有注释或类似的东西?

 @JsonPropertyOrder({ "id", "label", "target", "source", "attributes" }) public class Relation { ... } 

你可以使用@XmlAccessorType(XmlAccessType.FIELD)

 @XmlType(name = "response", propOrder = { "prop1", "prop2", "prop3", "prop4", "prop5", "prop6" }). 

@JsonPropertyOrder需要添加一个新的jar。