Java序列化父类的字段排在前面
今天测试接口的时候,发现了一个问题。我的Json返回的数据出现了以下情况。我的createby
,createTime
,updateBy
,updateTime
,remark
这些字段都是继承了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<>();
}
如果想让这些继承的字段(如 createBy
、createTime
等)出现在 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;
}