我正在开发 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
提交
取消