springboot项目返回json对象null值默认值处理,以及时间格式化返回处理

# 当我们在springboot项目中对返回的数据没有进行任何处理时默认返回值为null值如下

 # 此时我们可以用默认的jackson格式化处理,只需要加上一个json格式化的配置类继承MappingJackson2HttpMessageConverter类,按我们的需要实现,即可按我们的需要处理json序列化返回值格式,返回结果如下:

 # 具体代码如下,直接复制即可使用,希望对大家有所帮助!!

@Configuration
public class JacksonHttpMessageConverter extends MappingJackson2HttpMessageConverter {

    /**
     * json处理器
     */
    public static class MyBeanSerializerModifier extends BeanSerializerModifier {

        private static final Map<String, JsonSerializer<Object>> FACTORY = new HashMap<>();

        private static final String ARRAY = "array";
        private static final String STRING = "string";
        private static final String NUMBER = "number";
        private static final String OBJECT = "object";
        private static final String BOOLE = "boole";

        static {
            FACTORY.put(ARRAY, new NullArrayJsonSerializer());
            FACTORY.put(STRING, new NullStringJsonSerializer());
            FACTORY.put(NUMBER, new NullNumberJsonSerializer());
            FACTORY.put(OBJECT, new NullObjectJsonSerializer());
            FACTORY.put(BOOLE, new NullBooleanJsonSerializer());
        }

        @Override
        public List<BeanPropertyWriter> changeProperties(SerializationConfig config, BeanDescription beanDesc, List<BeanPropertyWriter> beanProperties) {
            // 需要进行添加序列化的类型我们可以在这里进行添加和判断
            for (BeanPropertyWriter writer : beanProperties) {
                // 判断字段的类型,如果是数组或集合则注册nullSerializer
                writer.assignNullSerializer(FACTORY.get(TypeEnum.isWrite(writer)));

            }
            return beanProperties;
        }
    }


    public enum TypeEnum {
        ARRAY("array",
                writer -> {
                    Class<?> clazz = writer.getType().getRawClass();
                    return clazz.isArray() || Collection.class.isAssignableFrom(clazz);
                }
        ),

        STRING("string",
                writer -> {
                    Class<?> clazz = writer.getType().getRawClass();
                    return CharSequence.class.isAssignableFrom(clazz) || Character.class.isAssignableFrom(clazz);
                }
        ),

        NUMBER("number",
                writer -> {
                    Class<?> clazz = writer.getType().getRawClass();
                    return Number.class.isAssignableFrom(clazz);
                }
        ),

        BOOLE("boole",
                writer -> {
                    Class<?> clazz = writer.getType().getRawClass();
                    return clazz.equals(Boolean.class);
                }
        ),
        ;


        public static String isWrite(BeanPropertyWriter writer) {
            for (TypeEnum value : TypeEnum.values()) {
                if (value.result.apply(writer)) {
                    return value.type;
                }
            }
            return "object";
        }


        private final Function<BeanPropertyWriter, Boolean> result;

        private final String type;

        TypeEnum(String type, Function<BeanPropertyWriter, Boolean> result) {
            this.result = result;
            this.type = type;
        }
    }

    /**
     * 处理数组集合类型的null值
     */
    private static class NullArrayJsonSerializer extends JsonSerializer<Object> {
        @Override
        public void serialize(Object value, JsonGenerator jsonGenerator,
                              SerializerProvider serializerProvider) throws IOException {
            jsonGenerator.writeStartArray();
            jsonGenerator.writeEndArray();
        }
    }

    /**
     * 处理字符串类型的null值
     */
    private static class NullStringJsonSerializer extends JsonSerializer<Object> {
        @Override
        public void serialize(Object value, JsonGenerator jsonGenerator,
                              SerializerProvider serializerProvider) throws IOException {
            jsonGenerator.writeString("");
        }
    }

    /**
     * 处理数值类型的null值
     */
    private static class NullNumberJsonSerializer extends JsonSerializer<Object> {
        @Override
        public void serialize(Object value, JsonGenerator jsonGenerator,
                              SerializerProvider serializerProvider) throws IOException {
            jsonGenerator.writeNumber(0);
        }
    }

    /**
     * 处理boolean类型的null值
     */
    private static class NullBooleanJsonSerializer extends JsonSerializer<Object> {
        @Override
        public void serialize(Object value, JsonGenerator jsonGenerator,
                              SerializerProvider serializerProvider) throws IOException {
            jsonGenerator.writeBoolean(false);
        }
    }

    /**
     * 处理实体对象类型的null值
     */
    private static class NullObjectJsonSerializer extends JsonSerializer<Object> {
        @Override
        public void serialize(Object value, JsonGenerator jsonGenerator,
                              SerializerProvider serializerProvider) throws IOException {
            jsonGenerator.writeStartObject();
            jsonGenerator.writeEndObject();
        }
    }

    /**
     * 初始化处理序列化null值,及日期格式化格式
     */
    public JacksonHttpMessageConverter() {
        getObjectMapper()
                .setSerializerFactory(getObjectMapper()
                        .getSerializerFactory()
                        .withSerializerModifier(new MyBeanSerializerModifier()))
                .setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));

    }
}

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值