簡體   English   中英

數據模型類未按定義的順序返回字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM