为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

手掌心 2022-03-10 16:00:05
我正在开发 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,您可能需要编写自己的序列化程序。


查看完整回答
反对 回复 2022-03-10
  • 1 回答
  • 0 关注
  • 161 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信