json序列化工具类

package com.jsy.community.utils;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.jsy.community.config.web.MyBeanSerializerModifier;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;

import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.List;

/**
 * json序列化工具类
 * @author YuLF
 * @since 2021-01-14 14:32
 */
public class JsySerializerModifier {

    /**
     * 指定全局配置 返回vo时 序列化时不忽略指定的字段 即使为Null
     * 需要注意的是:当第一次指定某个返回Vo对象忽略字段时,以后的方法只要是返回这个Vo对象类型 都会忽略掉第一次指定忽略的字段
     * 除非在另一个方法 又调用了 JsySerializerModifier.notIgnore() 会覆盖掉上一次的设置
     * 调用:
     * JsySerializerModifier.notIgnore( House.class, "houseName" );  指定返回House对象的方法 即使 houseName 为Null 也返回 不忽略这个字段
     * JsySerializerModifier.notIgnore( User.class, "gender", "age", "hobby" ); 指定返回User对象的方法 不忽略 gender、ade、hobby属性,即使为Null
     * JsySerializerModifier.notIgnore() 该方法作用域与 返回 Bean对象 和List<Bean> 对象 和 CommonResult.ok(Bean) 或 CommonResult.ok(List<Bean>) 对象
     * @param field     指定返回忽略的字段 可以有多个
     * @param type      class类型
     */
    public static void notIgnore(Class<?> type,String...field){
        if( field == null || type == null){
            return;
        }
        List<String> s = Arrays.asList(field.clone());
        MyBeanSerializerModifier beanSerializerModifier = new MyBeanSerializerModifier(type, s);
        MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = (MappingJackson2HttpMessageConverter)SpringContextUtils.getBean("mappingJackson2HttpMessageConverter");
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        setObjectMapperTime(objectMapper);
        objectMapper.setSerializerFactory(objectMapper.getSerializerFactory().withSerializerModifier(beanSerializerModifier));
        mappingJackson2HttpMessageConverter.setObjectMapper(objectMapper);
    }

    public static void setObjectMapperTime(ObjectMapper objectMapper){
        //处理Date
        objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
        // 初始化JavaTimeModule
        JavaTimeModule javaTimeModule = new JavaTimeModule();
        //处理LocalDateTime
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(dateTimeFormatter));
        objectMapper.registerModule(javaTimeModule);
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小小刘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值