jackson序列化问题Type id handling not implemented for type java.util.Date

https://blog.csdn.net/Ellen_Tangxiang/article/details/111310153
使用自定义序列化,Date类型使用的是
com.fasterxml.jackson.databind.JsonSerializer#serializeWithType

于是我们就可以做点坏事了

重写serializeWithType方法

package com.zhaolaobao.redis.mode;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonToken;
import com.fasterxml.jackson.core.type.WritableTypeId;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;
import org.springframework.data.redis.serializer.SerializationUtils;
import org.springframework.lang.Nullable;

import java.io.IOException;
import java.util.Date;

/**
 * @Author qiuxinyao
 * @Description //TODO
 * @Date 16:08 2020/8/27
 * @Param
 * @return
 **/
public class DateToTimestamplUtil extends JsonSerializer<Object> {

    @Override
    public void serialize(Object value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        if (value != null) {
            Date date = translateToDate(value);
            jsonGenerator.writeNumber(date.getTime());
        }
    }
    /**
     * 将Object对象转成Date对象
     * @param object
     * @return
     */
    public static Date translateToDate(Object object){
        Date date;
        if(object instanceof Date){
            date=(Date)object;
        }else {
            date = new Date();
        }
        return date;
    }
    
    @Override
    public void serializeWithType(Object value, JsonGenerator g, SerializerProvider provider,
                                  TypeSerializer typeSer) throws IOException
    {
        // NOTE: need not really be string; just indicates "scalar of some kind"
        WritableTypeId typeIdDef = typeSer.writeTypePrefix(g,
                typeSer.typeId(value, JsonToken.VALUE_STRING));
        serialize(value, g, provider);
        typeSer.writeTypeSuffix(g, typeIdDef);
    }
}


Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐