• FastJson 自定义反序列化类


    反序列化类

    package com.seliote.demo.test;
    
    import com.alibaba.fastjson.parser.DefaultJSONParser;
    import com.alibaba.fastjson.parser.JSONToken;
    import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer;
    import org.springframework.util.Assert;
    
    import java.lang.reflect.Type;
    import java.time.LocalDateTime;
    import java.time.format.DateTimeFormatter;
    import java.time.format.DateTimeParseException;
    import java.util.LinkedList;
    import java.util.List;
    
    /**
     * FastJson 时间格式自定义反序列化类
     *
     * @author LiYangDi
     * @since 2019/12/23
     */
    public class FastJsonLocalDateTimeDeserializer implements ObjectDeserializer {
    
        private static List<DateTimeFormatter> dateTimeFormatters = new LinkedList<>();
    
        static {
            // Add your own formatter to there
            dateTimeFormatters.add(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
            dateTimeFormatters.add(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS"));
            dateTimeFormatters.add(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSS"));
            dateTimeFormatters.add(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSSSSS"));
        }
    
        @SuppressWarnings("unchecked")
        @Override
        public LocalDateTime deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
            final String input = parser.lexer.stringVal();
            LocalDateTime localDateTime = null;
            for (DateTimeFormatter dateTimeFormatter : dateTimeFormatters) {
                try {
                    localDateTime = LocalDateTime.parse(input, dateTimeFormatter);
                    // Format success, step over other DateTimeFormatter
                    break;
                } catch (DateTimeParseException ex) {
                    // do nothing to use next formatter
                }
            }
            Assert.notNull(localDateTime, "FastJson LocalDateTime use" +
                    " FastJsonTimestampDeserializer format error: " + input);
            return localDateTime;
        }
    
        @Override
        public int getFastMatchToken() {
            return JSONToken.LITERAL_INT;
        }
    }
    

    测试

    POJO

    package com.seliote.demo.pojo;
    
    import com.alibaba.fastjson.annotation.JSONField;
    import com.seliote.demo.test.FastJsonLocalDateTimeDeserializer;
    import lombok.Data;
    
    import java.time.LocalDateTime;
    
    /**
     * 测试 POJO
     *
     * @author LiYangDi
     * @since 2019/12/23
     */
    @Data
    public class Pojo {
    
        @JSONField(name = "time", deserializeUsing = FastJsonLocalDateTimeDeserializer.class)
        //@JSONField(name = "time")
        private LocalDateTime localDateTime;
    
        @JSONField(name = "name")
        private String name;
    }
    

    测试类

    package com.seliote.demo.test;
    
    import com.alibaba.fastjson.JSONObject;
    import com.seliote.demo.pojo.Pojo;
    import lombok.extern.slf4j.Slf4j;
    
    /**
     * <p>
     * 测试类
     * </p>
     *
     * @author LiYangDi
     * @since 2019/11/20
     */
    @Slf4j
    public class FastJsonTest {
    
        public static void main(String... args) {
            final String json = "{"time":"2019-12-23 20:18:02.111111111", "name":"seliote"}";
            Pojo pojo = JSONObject.parseObject(json, Pojo.class);
        }
    }
    
  • 相关阅读:
    黑马程序员系列第十篇 异常
    黑马程序员系列第八篇 IO(2)
    黑马程序员系列第九篇 类加载器
    黑马程序员系列第六篇 面向对象基础
    黑马程序员系列第七篇 IO(1)
    黑马程序员系列第五篇 集合(2)
    黑马程序员系列第四篇 集合(1)
    黑马程序员系列第三篇 反射
    vue 自定义指令集合
    计算图片缩放比例 使图片不变形
  • 原文地址:https://www.cnblogs.com/seliote/p/12088661.html
Copyright © 2020-2023  润新知