Java序列化父类的字段排在前面

今天测试接口的时候,发现了一个问题。我的Json返回的数据出现了以下情况。我的createbycreateTimeupdateByupdateTimeremark这些字段都是继承了BaseEntity类。
在 Java 的序列化过程中,继承的字段通常会按照类的层级顺序排列,导致父类的字段排在前面。

{
  "createBy": "1",
  "createTime": "2025-03-14 18:31:17",
  "updateBy": "1",
  "updateTime": "2025-03-14 18:31:17",
  "remark": null,
  "id": "fba9677ad1b34e52a666fb767d967a2a",
  "fileName": "1896857804418367488.jpg",
  "filePath": "/lds/profile/2025/03/14/1896857804418367488_20250314112740A008.jpg",
  "fileExtension": "jpg",
  "fileSize": 30024,
  "fileType": "lds_company-legal_person_id_front",
  "relateId": "b55cca0cc8d4f939c9c39f4f6429d7ee",
  "status": "0"
}

我的实体类代码如下

@EqualsAndHashCode(callSuper = true)
@Data
public class LdsUploadFile extends BaseEntity {

    /**
     * 文件编号
     */
    @TableId(type = IdType.ASSIGN_UUID)
    private String id;
    /**
     * 文件名
     */
    private String fileName;
    /**
     * 文件相对路径
     */
    private String filePath;
    /**
     * 文件后缀扩展名
     */
    private String fileExtension;
    /**
     * 文件大小(单位B)
     */
    private Long fileSize;
    /**
     * 文件业务类型
     */
    private String fileType;
    /**
     * 文件所属对象id
     */
    private String relateId;
    /**
     * 0正常 1删除
     */
    private String status;
}


@Data
public class BaseEntity implements Serializable
{
    private static final long serialVersionUID = 1L;

    /** 搜索值 */
    @JsonIgnore
    @TableField(select = false,exist = false)
    private String searchValue;

    /** 创建者 */
    @TableField(value = "create_by",fill = FieldFill.INSERT)
    private String createBy;

    /** 创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(value = "create_time",fill = FieldFill.INSERT)
    private Date createTime;

    /** 更新者 */
    @TableField(value = "update_by",fill = FieldFill.INSERT_UPDATE)
    private String updateBy;

    /** 更新时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

    /** 备注 */
    private String remark;

    /** 请求参数 */
    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    @JsonIgnore
    @TableField(select = false,exist = false)
    private Map<String, Object> params=new HashMap<>();

}

如果想让这些继承的字段(如 createBycreateTime 等)出现在 JSON 的最后,可以使用 @JsonPropertyOrder 注解或 自定义序列化 方式进行调整。这边推荐使用@JsonPropertyOrder 注解只需要一个行注解即可。

@EqualsAndHashCode(callSuper = true)
@Data
@JsonPropertyOrder({"id", "fileName", "filePath", "fileExtension", "fileSize", "fileType", "relateId", "status", "createBy", "createTime", "updateBy", "updateTime", "remark"})
public class LdsUploadFile extends BaseEntity {

    /**
     * 文件编号
     */
    @TableId(type = IdType.ASSIGN_UUID)
    private String id;
    /**
     * 文件名
     */
    private String fileName;
    /**
     * 文件相对路径
     */
    private String filePath;
    /**
     * 文件后缀扩展名
     */
    private String fileExtension;
    /**
     * 文件大小(单位B)
     */
    private Long fileSize;
    /**
     * 文件业务类型
     */
    private String fileType;
    /**
     * 文件所属对象id
     */
    private String relateId;
    /**
     * 0正常 1删除
     */
    private String status;

}
posted @ 2025-03-16 19:08  ゐ叶う枫ゆ  阅读(48)  评论(0)    收藏  举报