fastjson2 icon indicating copy to clipboard operation
fastjson2 copied to clipboard

SpringMvc中全局设置了`JSONWriter.Feature.WriteMapNullValue`,如何单独指定某个类型设置不过滤NULL(也就是fastjson)默认序列化方式

Open mf-yuan opened this issue 1 year ago • 15 comments

SpringMvc中全局设置了JSONWriter.Feature.WriteMapNullValue,不过滤NULL值,

如何针对某个类型过滤NULL值,JSONWriter.Feature中是否存在过滤NULL的值

@Bean
public FastJsonHttpMessageConverter fastJsonHttpMessageConverter(){
    FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
    //自定义配置
    FastJsonConfig config = new FastJsonConfig();
    config.setDateFormat("yyyy-MM-dd HH:mm:ss");
    config.setReaderFeatures(JSONReader.Feature.FieldBased, JSONReader.Feature.SupportArrayToBean);
    config.setWriterFeatures(JSONWriter.Feature.WriteMapNullValue);
    converter.setFastJsonConfig(config);
    converter.setDefaultCharset(StandardCharsets.UTF_8);
    converter.setSupportedMediaTypes(Collections.singletonList(MediaType.APPLICATION_JSON));
    return converter;
}
`

mf-yuan avatar Jan 23 '24 16:01 mf-yuan

WriteNulls?

rowstop avatar Jan 24 '24 02:01 rowstop

WriteNulls?

WriteNulls 是允许不过滤NULL 值

mf-yuan avatar Jan 24 '24 02:01 mf-yuan

没明白你的意思,你意思是某个具体的类型过滤 null 值,其它类型不过滤?

rowstop avatar Jan 24 '24 02:01 rowstop

没明白你的意思,你意思是某个具体的类型过滤 null 值,其它类型不过滤?

就是这个意思。

mf-yuan avatar Jan 24 '24 04:01 mf-yuan

JSONType 注解是否可以实现你的需求

rowstop avatar Jan 24 '24 05:01 rowstop

JSONTypeserializeFeatures 这个属性吗,我在这个枚举里面貌似没有找到过滤NULL的值,也就是默认值

mf-yuan avatar Jan 24 '24 05:01 mf-yuan

JSONTypeserializeFeatures 这个属性吗,我在这个枚举里面貌似没有找到过滤NULL的值,也就是默认值

🤔serializeFilters 配一个PropertyFilter

rowstop avatar Jan 24 '24 07:01 rowstop

那这个有点痛苦了😖

mf-yuan avatar Jan 24 '24 07:01 mf-yuan

JSONField#serializeFeatures 这个能满足你的需求么?

wenshao avatar Jan 27 '24 07:01 wenshao

JSONField#serializeFeatures 这个能满足你的需求么?

目前好像没有,我是希望能在这里找到默认虚拟化方式对应的值

mf-yuan avatar Jan 27 '24 13:01 mf-yuan

那这个有点痛苦了😖

PropertyFilter这种方式不行?痛苦的点在哪?涉及的类型太多?🤔

    public class PropertyNullValueFilter implements PropertyFilter {
        @Override
        public boolean apply(Object object, String name, Object value) {
            return value != null;
        }
    }

    @JSONType(serializeFilters = PropertyNullValueFilter.class)
    public class User {
        private String username;
        private String password;
        //getter setter...
    }

rowstop avatar Jan 30 '24 08:01 rowstop

那这个有点痛苦了😖

PropertyFilter这种方式不行?痛苦的点在哪?涉及的类型太多?🤔

    public class PropertyNullValueFilter implements PropertyFilter {
        @Override
        public boolean apply(Object object, String name, Object value) {
            return value != null;
        }
    }

    @JSONType(serializeFilters = PropertyNullValueFilter.class)
    public class User {
        private String username;
        private String password;
        //getter setter...
    }

你这个看起来不痛苦😂,可以解决。我原以为每个类型可能都要定义一个不同的PropertyFilter

mf-yuan avatar Jan 31 '24 09:01 mf-yuan

但是serializeFeatures 为什么没有提供一个默认的序列化方式的值呢,感觉这里面加会更好一点。

mf-yuan avatar Jan 31 '24 09:01 mf-yuan

那这个有点痛苦了😖

PropertyFilter这种方式不行?痛苦的点在哪?涉及的类型太多?🤔

    public class PropertyNullValueFilter implements PropertyFilter {
        @Override
        public boolean apply(Object object, String name, Object value) {
            return value != null;
        }
    }

    @JSONType(serializeFilters = PropertyNullValueFilter.class)
    public class User {
        private String username;
        private String password;
        //getter setter...
    }

你这个看起来不痛苦😂,可以解决。我原以为每个类型可能都要定义一个不同的PropertyFilter

你这个有点定制化,默认是不输出 null 值字段的

rowstop avatar Jan 31 '24 10:01 rowstop

那这个有点痛苦了😖

PropertyFilter这种方式不行?痛苦的点在哪?涉及的类型太多?🤔

    public class PropertyNullValueFilter implements PropertyFilter {
        @Override
        public boolean apply(Object object, String name, Object value) {
            return value != null;
        }
    }

    @JSONType(serializeFilters = PropertyNullValueFilter.class)
    public class User {
        private String username;
        private String password;
        //getter setter...
    }

你这个看起来不痛苦😂,可以解决。我原以为每个类型可能都要定义一个不同的PropertyFilter

你这个有点定制化,默认是不输出 null 值字段的

确实默认是不输出NULL值字段的。 但是使用JSON 来进行全局配置的时候,也会遇到一样的情况。针对某个对象需要默认的序列化。感觉PropertyFilter不是最优解

package com.alibaba.fastjson2;

interface JSON {
    static void config(JSONReader.Feature... features);
    static void config(JSONWriter.Feature... features);
}

mf-yuan avatar Jan 31 '24 12:01 mf-yuan