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);
        }
    }
    
  • 相关阅读:
    centos 8.5设置nginx开机自动启动
    python利用Faker模块造测试数据(转载)
    结构化分析建模
    关于使用com.anjiplus依赖实现的验证码功能在linux服务器上失效的问题
    vue 子组件提交接口,父组件刷新数据
    vue 全局钩子:路由守卫
    Scala函数式编程基础
    Flink
    Scala面向对象编程
    Scala运算符
  • 原文地址:https://www.cnblogs.com/seliote/p/12088661.html
Copyright © 2011-2022 走看看