数据模型类未按定义的顺序返回字段

我正在开发 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 的行上设置断点并查看对象,则字段的顺序错误

http://img3.mukewang.com/6229b052000176de04320232.jpg

为了回答一些问题,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 映射。在我看来,这种转移似乎不会导致问题,不是吗?


手掌心
浏览 162回答 1
1回答

小怪兽爱吃肉

您用于填充AuditRecord实例的顺序并不重要。它的字段如何序列化以及底层 JSON 编组器选择的顺序很重要。如果您使用的是 Jackson,这里是解决方案:@JsonPropertyOrder({&nbsp;&nbsp; &nbsp; "application",&nbsp;&nbsp; &nbsp; "objectName",&nbsp; &nbsp; ...&nbsp; &nbsp; "reconciledDate"})public class AuditRecord implements Serializable { ... }您应该按照您希望它们被序列化的方式排列字段名称。否则,杰克逊将坚持字母顺序。如果您不使用 Jackson,您可能需要编写自己的序列化程序。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java