solon.serialization.snack3
<dependency>
<groupId>org.noear</groupId>
<artifactId>solon.serialization.snack3</artifactId>
</dependency>
1、描述
序列化扩展插件,为 Solon Serialization 提供基于 Snack3 的框架适配。这插件也可用作 Solon Rpc 的服务端序列化方案。
使用时,会涉及到格式化的定制,其它就不会有显示的感受。
2、快捷格式化配置 (v1.12.3 后支持)
solon.serialization.json:
dateAsFormat: 'yyyy-MM-dd HH:mm:ss' #配置日期格式(默认输出为时间戳)
dateAsTimeZone: 'GMT+8' #配置时区
dateAsTicks: false #将date转为毫秒数(和 dateAsFormat 二选一)
longAsString: true #将long型转为字符串输出 (默认为false)
boolAsInt: false #将bool型转为字符串输出 (默认为false)
nullStringAsEmpty: false
nullBoolAsFalse: false
nullNumberAsZero: false
nullArrayAsEmpty: false
nullAsWriteable: false #输出所有null值
3、高级格式化定制(基于接口)
基于接口的格式化定制,(v1.12.3 后支持):
@Configuration
public class Config {
@Bean
public void jsonInit(@Inject SnackRenderFactory factory){
//示例1:通过转换器,做简单类型的定制
factory.addConvertor(Date.class, s -> s.getTime());
factory.addConvertor(LocalDate.class, s -> s.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
factory.addConvertor(Double.class, s -> String.valueOf(s));
//示例2:通过编码器,做复杂类型的原生定制(基于框架原生接口)
factory.addEncoder(Date.class, (data, node) -> node.val().setNumber(data.getTime()));
//示例3:调整特性(例,添加序列化null的特性)
factory.addFeatures(Feature.SerializeNulls); //增加特性
//factory.removeFeatures(Feature.SerializeNulls); //移除特性
//factory.setFeatures(Feature.SerializeNulls); //重设特性
}
}
3、个性化输出定制
public class User{
public long userId;
public String name;
@ONodeAttr(format = "yyyy-MM-dd")
public Date birthday;
}