我正在開發 JAX-RS RESTful 服務。我的模型類按字母順序返回字段。我希望它們按照我在課堂上添加它們的順序返回。這是我的模型類:public class AuditRecord implements Serializable { private static final long serialVersionUID = 3682698298601640061L; private String application; private String objectName; private String objectType; private String system; private String createdBy; private String createdDate; private String createdTime; private String detectedDate; private String reconciledBy; private String reconciledDate; // removed GETTERS and SETTERS for brevity}我正在實例化該類并按照創建字段的順序填充它:while(rs.next()) { AuditRecord a = new AuditRecord(); a.setApplication(rs.getString(1)); // PRAPPL a.setObjectName(rs.getString(2)); // PROBNM a.setObjectType(rs.getString(3)); // PROBAT a.setSystem(rs.getString(4)); // PRCRTS a.setCreatedBy(rs.getString(5)); // PRCRTU a.setCreatedDate(rs.getString(6)); // PRCDAT a.setCreatedTime(rs.getString(7)); // PRCTIM a.setDetectedDate(rs.getString(8)); // PRDDAT a.setReconciledBy(rs.getString(9)); // PRRECBY a.setReconciledDate(rs.getString(10)); // PRRECDT retVal.add(a);}填充類對象后,將其添加到列表中并返回到我的控制器并發送回網頁。我的控制器方法返回一個 JSON 對象。我希望這些字段按照我創建它們的順序排列,但是當我填充我的表時,這些對象是按字母順序排列的。在我之前從事的 RESTful 服務中,我沒有遇到過這種情況。如何讓字段按照定義的順序排列?如果我在將審計對象添加到 ArrayList 的行上設置斷點并查看對象,則字段的順序錯誤為了回答一些問題,rs 是 SQL 結果集上的一個實例。該查詢按照我需要顯示它們的順序選擇特定的命名字段。我不使用select * from ...最后,最后一塊是控制器方法:@GET@Path("audits")@Produces(MediaType.APPLICATION_JSON)public Response getAuditData(@QueryParam("startDate") String startDate, @QueryParam("endDate") String endDate) { SoxService service = new SoxService(); List<AuditRecord> data = new ArrayList<AuditRecord>();所以現在,在將這些編輯放在一起時,我意識到我沒有將球衣捆綁包放入我的項目中。這將是 RESTful 服務的實現與我所做的其他服務之間的唯一區別。這個正在另一個項目中實施。使用 Andrew Tobilko 的建議,我添加了 @JsonPropertyOrder 注釋,這解決了我的擔憂。那么,我的問題是,這是我完全通過注釋完成的第一個服務。我沒有向 web.xml 添加 servlet 映射。在我看來,這種轉移似乎不會導致問題,不是嗎?
1 回答

小怪獸愛吃肉
TA貢獻1852條經驗 獲得超1個贊
您用于填充AuditRecord實例的順序并不重要。它的字段如何序列化以及底層 JSON 編組器選擇的順序很重要。
如果您使用的是 Jackson,這里是解決方案:
@JsonPropertyOrder({
"application",
"objectName",
...
"reconciledDate"
})
public class AuditRecord implements Serializable { ... }
您應該按照您希望它們被序列化的方式排列字段名稱。否則,杰克遜將堅持字母順序。
如果您不使用 Jackson,您可能需要編寫自己的序列化程序。
添加回答
舉報
0/150
提交
取消