[alibaba/fastjson]关于空对象序列化成{}

2025-11-11 802 views
4

请大神回复下,最近遇到了一个头疼的问题。我们公司移动端要求我返回的json ,当对象中的所有属性值都是空时返回两个大括号,当对象中某个别字段属性值为空时必须返回该字段并且值为空字符串。我在处理的时候总是只能满足其中之一,不能两全,求大神帮助!

回答

7

找到了解决办法,使用了fast json 的filter

3

@kongweiteng 能告知一下怎么解决的么 valueFilter会覆盖掉SerializerFeature的配置

6

明天给你贴代码

4

@Configuration public class FastJsonConverterConfiguration {

PropertyFilter filter = new PropertyFilter() {

    @Override
    public boolean apply(Object source, String name, Object value) {
        //通过反射生成实体类
        Object[] filedValues = Reflections.getFiledValues(source);
        if(filedValues.length>1){
            for (Object object:filedValues){
                if(object!=null){
                    return true;
                }
            }
        }else{
            return true;
        }
        return false;
    }
};

@Bean
public HttpMessageConverters fastJsonHttpMessageConverters(){
    //1.需要定义一个convert转换消息的对象;
    FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
    //2:添加fastJson的配置信息;
    FastJsonConfig fastJsonConfig = new FastJsonConfig();
    fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat, SerializerFeature.WriteNullStringAsEmpty,SerializerFeature.WriteNullListAsEmpty,SerializerFeature.WriteMapNullValue);

    fastJsonConfig.setSerializeFilters(filter);

    //3处理中文乱码问题
    List<MediaType> fastMediaTypes = new ArrayList<>();
    fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
    //4.在convert中添加配置信息.
    fastJsonHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes);
    fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
    HttpMessageConverter<?> converter = fastJsonHttpMessageConverter;
    return new HttpMessageConverters(converter);

}

}

2

@kongweiteng 额 我试了你的代码,还是没有看到结果呢.原谅我没看懂代码是怎么实现空对象序列化为{}的

9

@duwei54 要不你加我微信吧,,,17346518261

8

@kongweiteng 试了下你的代码确实不行。