Solon

solon.serialization.fastjson

<dependency>
    <groupId>org.noear</groupId>
    <artifactId>solon.serialization.fastjson</artifactId>
</dependency>

1、描述

序列化扩展插件,为 Solon Serialization 提供基于 Fastjson 的框架适配。这插件也可用作 Solon Rpc 的服务端序列化方案。

使用时,会涉及到格式化的定制,其它就不会有显示的感受。

2、格式化定制

格式化定制,需要在 solon.serialization.fastjson 插件启动之前进行定制:

public class DemoApp {
    public static void main(String[] args) {
        app.onEvent(FastjsonRenderFactory.class, e -> initMvcJsonCustom(e));
    }

    //初始化json定制(需要在插件运行前定制)
    private static void initMvcJsonCustom(FastjsonRenderFactory factory) {
        //示例1:通过转换器,做简单类型的定制
        factory.addConvertor(Date.class, s -> s.getTime());

        factory.addConvertor(LocalDate.class, s -> s.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));

        factory.addConvertor(Long.class, s -> String.valueOf(s));

        //示例2:通过编码器,做复杂类型的原生定制(基于框架原生接口)
        factory.addEncoder(Date.class, (ser, obj, o1, type, i) -> {
            SerializeWriter out = ser.getWriter();
            out.writeLong(((Date) obj).getTime());
        });

        //示例3:重置序列化特性(例,添加序列化null的特性)
        factory.setFeatures(SerializerFeature.BrowserCompatible,
                SerializerFeature.DisableCircularReferenceDetect,
                SerializerFeature.WriteMapNullValue);
                
        //factory.config()...
    }
}

3、个性化输出定制

public class User{
    public long userId;
    
    public String name;
    
    @JSONField(format = "yyyy-MM-dd")
    public Date birthday;
}