用于为JSON对象添加额外字段
该规则用于向JSON对象模型添加额外的字段,这些字段可能在原始类中不存在,但在API文档或接口中需要呈现。
额外字段需要以JSON格式配置,包含以下字段:
name
: 字段名称type
: 字段类型defaultValue
: 默认值desc
: 字段描述required
: 是否必须# 添加单个字段
json.additional.field={name: "timestamp", type: "long", desc: "记录创建时间戳", required: true, defaultValue: "", demo: "1634567890123"}
# 添加多个字段(每行一个字段配置)
json.additional.field={name: "version", type: "string", desc: "API版本", required: true, defaultValue: "1.0", demo: "1.0"}
json.additional.field={name: "trace_id", type: "string", desc: "追踪ID", required: false, defaultValue: "", demo: "abc123"}
你可以使用条件表达式来控制字段添加的范围:
# 为特定类添加字段
json.additional.field[com.itangcent.model.UserInfo]={name: "label", defaultValue: "genius", type: "java.lang.String", desc: "label of the user", required: true}
# 为特定类的特定字段添加关联字段
json.additional.field[com.itangcent.model.UserInfo#name]={name: "firstName", defaultValue: "tang", type: "java.lang.String", desc: "a family name", required: false}
json.additional.field[com.itangcent.model.UserInfo#age]={name: "order", defaultValue: "12", type: "int", desc: "order of the age in family", required: true}
# 使用groovy条件表达式
json.additional.field[groovy:it.containingClass().name().startsWith("com.example.model")]={name: "timestamp", type: "long", desc: "记录创建时间戳", required: true, defaultValue: "", demo: "1634567890123"}
# 根据注解控制添加字段
json.additional.field[@com.example.annotation.NeedsTimestamp]={name: "timestamp", type: "long", desc: "记录创建时间戳", required: true, defaultValue: "", demo: "1634567890123"}
配置
# 为User类添加额外字段
json.additional.field[com.example.model.User]={name: "createTime", type: "long", desc: "记录创建时间戳", required: true, defaultValue: "", demo: "1634567890123"}
# 为User类的特定字段添加关联字段
json.additional.field[com.example.model.User#name]={name: "label", type: "string", desc: "用户显示标签", required: false, defaultValue: "", demo: "VIP用户"}
json.additional.field[com.example.model.User#gender]={name: "genderText", type: "string", desc: "性别文本描述", required: false, defaultValue: "未知", demo: "男"}
User.java
/**
* 用户DTO
*/
public class User {
/**
* 用户ID
*/
private Long id;
/**
* 用户名称
*/
private String name;
/**
* 用户性别
* 0-男, 1-女
*/
private Integer gender;
/**
* 用户年龄
*/
private Integer age;
// getters and setters...
}
在上面的示例中,通过配置文件而非类注解添加了额外字段,当User类被序列化为JSON时,会额外包含以下字段:
createTime
- 添加到整个User类的记录创建时间戳label
- 与name字段相关联的显示标签genderText
- 与gender字段相关联的文本描述这种配置方式无需修改原始类的代码,可以在配置文件中集中管理所有额外字段的定义。