snack4 - Json 序列化注解使用
2026年8月3日 下午3:11:32
| 注解 | 描述 | 备注 |
|---|---|---|
ONodeCreator | 标准对象创建入口 | 可用于构造方法或静态方法 |
ONodeAttr | 标注节点属性元 | (相对于 Options)提供了局部的定制支持 |
1、ONodeCreator
使用 ONodeCreator,可以指定反序列化用的构造方法(或静态工厂方法)。
import org.noear.snack4.annotation.ONodeAttr;
import org.noear.snack4.annotation.ONodeCreator;
import java.util.Date;
public class DateDo {
public Date date1 = new Date();
@ONodeAttr(format="yyyy-MM-dd")
public Date date2 = new Date();
public DateDo() {
}
public DateDo(Date date1) {
this.date1 = date1;
}
@ONodeCreator
public DateDo(Date date1, Date date2) {
this.date1 = date1;
this.date2 = date2;
}
}
接口定义(可作用于构造方法、方法):
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.CONSTRUCTOR, ElementType.METHOD})
public @interface ONodeCreator {
}
2、ONodeAttr
ONodeAttr 的使用,优先级高于 Options,且用于局部。以时间为例:
import org.noear.snack4.annotation.ONodeAttr;
import java.util.Date;
public class DateDo {
public Date date1 = new Date();
@ONodeAttr(format="yyyy-MM-dd")
public Date date2 = new Date();
}
更详细的 ONodeAttr 接口:
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE})
public @interface ONodeAttr {
/**
* 键名
*/
String name() default "";
/**
* 标题
*/
String title() default "";
/**
* 描述
*/
String description() default "";
/**
* 是否必须
*/
boolean required() default true;
/**
* 默认值(用于 JsonSchema)
*
* @since 4.0.35
*/
String defaultValue() default "";
/**
* 格式化
*/
String format() default "";
/**
* 时区
*/
String timezone() default "";
/**
* 扁平化
*/
boolean flat() default false;
/**
* 特性
*/
Feature[] features() default {};
/**
* 乎略
*/
boolean ignore() default false;
/**
* 是否编码(序列化)
*/
boolean encode() default true;
/**
* 是否解码(反序列化)
*/
boolean decode() default true;
/**
* 自定义编码器
*/
Class<? extends ObjectEncoder> encoder() default ObjectEncoder.class;
/**
* 自定义解码器
*/
Class<? extends ObjectDecoder> decoder() default ObjectDecoder.class;
/**
* 自定义生成器
*/
Class<? extends ObjectCreator> creator() default ObjectCreator.class;
}