Sping Boot 上的JacksonMap器,序列化时元素的继承和顺序

drkbr07n  于 2023-11-19  发布在  其他
关注(0)|答案(1)|浏览(178)

我正在尝试设置继承时序列化属性的顺序。
我有一个@MappedSuperClass,BaseEntity,ID,creationDate,modificationDate,creationUser,modificationUser。

@MappedSuperclass
public abstract class BaseEntity implements Serializable {

@Id
@Column(nullable = false, updatable = false)
@GenericGenerator(name = "db-uuid", strategy = "guid")
@GeneratedValue(generator = "db-uuid")
protected String id;

@NotNull
@PastOrPresent
@Column(nullable = false, updatable = false)
protected Date creationDate;
@PastOrPresent
protected Date modificationDate;

protected String creationUser;
protected String modificationUser;

字符串
并且每个实体都从这个实体扩展。例如

@Entity(name = "Technician")
public class AsnTechnician extends BaseEntity {
    private String name;
    private String sex;
}


当Jackson序列化这个对象时,顺序是:{id, creationDate, modificationDate, creationUser, modificationUser, name, sex}。我想要类似于:{id, name, sex, creationDate, modificationDate, creationUser, modificationUser}
这里的问题是,使用继承,我不知道如何正确地管理属性的顺序。有没有一种方法可以做到这一点,而不必在每个扩展BaseEntity的实体中声明它?
我知道这并不重要,这只是为了可读性!而且,我知道我应该使用DTO作为控制器的输出,而不是实体,这将在稍后进行。
我在id下尝试了@JsonProperty(index=1),效果很好。但是我不知道如何告诉Jackson其他的应该放在最后一个。尝试了@JsonProperty(index=99)等,但是不起作用,它们在id之后和AsnTechnician属性之前
有没有一种方法可以告诉Jackson有一些属性(父类的),我想成为第一个(id)和最后一个(creationDate)?

rvpgvaaj

rvpgvaaj1#

使用@JsonPropertyOrder对Json元素进行排序。另外,确保BaseEntity和Entity都有Getter和Setter。

@Entity(name = "Technician")
@JsonPropertyOrder({"id", "name", "sex", "creationDate", "modificationDate", "creationUser", "modificationUser"}
public class AsnTechnician extends BaseEntity {
    private String name;
    private String sex;
}

字符串

相关问题