gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:45:32 31 4
gpt4 key购买 nike

我正在开发 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);
}

填充类对象后,它会添加到列表中并返回到我的 Controller 并发送回网页。

我的 Controller 方法返回一个 JSON 对象。我希望字段按照我创建它们的顺序排列,但是当我填充表时,对象按字母顺序排列。

我在之前开发的 RESTful 服务中没有遇到过这个问题。如何让字段按照定义的顺序排列?

如果我在将审核对象添加到 ArrayList 的行上设置断点并查看该对象,则字段会以错误的顺序列出

enter image description here

为了回答一些问题,rs 是 SQL Resultset 上的一个实例。该查询按照我需要显示的顺序选择特定的命名字段。我不使用 select * from ...

最后,最后一 block 是 Controller 方法:

@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();
}

现在,在将这些编辑放在一起时,我意识到我没有将 Jersey 包拉到我的项目中。这是 RESTful 服务的实现与我所做的其他服务之间的唯一区别。这个正在另一个项目中实现。

根据 Andrew Tobilko 的建议,我添加了 @JsonPropertyOrder 注释,这解决了我的担忧。

那么我的问题是,这是我完全通过注释完成的第一个服务。我没有将 servlet 映射添加到 web.xml。在我看来,这种转移似乎不会导致问题,不是吗?

最佳答案

用于填充 AuditRecord 实例的顺序并不重要。它的字段如何序列化以及底层 JSON 编码器选择的顺序很重要。

如果您正在使用 Jackson,解决方案如下:

@JsonPropertyOrder({ 
"application",
"objectName",
...
"reconciledDate"
})
public class AuditRecord implements Serializable { ... }

您应该按照您希望序列化的方式排列字段名称。否则, jackson 将坚持字母顺序。

如果您不使用 Jackson,您可能需要编写自己的序列化程序。

关于java - 数据模型类未按定义的顺序返回字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53729974/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com