[英]Data model class not returning fields in defined order
我正在使用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服務中,我還沒有遇到過這個問題。 如何使字段符合定義的順序?
如果我在將Audit Object添加到ArrayList的行上設置了一個斷點並查看了該對象,則字段以錯誤的順序列出
為了回答某些問題,rs是SQL Resultset上的一個實例。 該查詢按顯示順序選擇特定的命名字段。 我不使用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>();
try {
data = service.getAuditData(startDate, endDate);
}catch(Exception e) {
}
return Response.ok(data, MediaType.APPLICATION_JSON).build();
}
所以現在,在將這些編輯放在一起的同時,我意識到我還沒有將球衣捆綁到我的項目中。 這將是RESTful服務的實現與我已經完成的其他實現之間的唯一區別。 這是在另一個項目中實現的。
使用Andrew Tobilko的建議,我添加了@JsonPropertyOrder批注,這解決了我的擔憂。
那么,我的問題是,這是我完全通過注釋完成的第一項服務。 我尚未將servlet映射添加到web.xml。 在我看來,這種轉移似乎不會引起問題,不是嗎?
您用來填充AuditRecord
實例的順序並不重要。 它的字段如何序列化以及底層JSON編組器選擇的順序很重要。
如果您正在使用Jackson,請使用以下解決方案:
@JsonPropertyOrder({
"application",
"objectName",
...
"reconciledDate"
})
public class AuditRecord implements Serializable { ... }
您應該按照希望序列化字段名稱的方式進行排列。 否則,傑克遜將堅持字母順序。
如果您不使用傑克遜,則可能需要編寫自己的序列化器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.