zoukankan      html  css  js  c++  java
  • 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);
        }
    }
    
  • 相关阅读:
    Android开发之适配器-ListView适配器的重复数据
    Android开发之TextView的下划线添加
    Android 自定义View修炼-Android开发之自定义View开发及实例详解
    Android 开发之自定义Dialog及UI的实现
    Android开发之ContentProvider(内容提供者)
    XC文件管理器(Android应用)
    高效 告别996,开启java高效编程之门 4-1普通码农与风骚码农资源关闭PK
    高效 告别996,开启java高效编程之门 4-2垃圾回收与物理资源释放
    高效 告别996,开启java高效编程之门 3-29实战案例五:排序
    高效 告别996,开启java高效编程之门 3-28实战案例四:分组
  • 原文地址:https://www.cnblogs.com/seliote/p/12088661.html
Copyright © 2011-2022 走看看