zoukankan      html  css  js  c++  java
  • 使用FASTJSON做反序列化的时间格式处理

    JSONObject.DEFFAULT_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.mmm";
    Productorder tmp1 = JSONObject.parseObject(tmp.toJSONString(), Productorder.class);

    • 方案2:新增date反序列化解析器

    主要思路是以fastjson原生的DateDeserializer.class为基础,定制化一个可以解析0000-00-00日期反序列化解析器。
    该方式是fastjson函数JSON.parseObject()的一个应用场景,通过定制化ParserConfig参数,达到局部改变JSON解析逻辑的目的。
    如下:

    package jeromechan.fixbug.fastjson;
    
    import com.alibaba.fastjson.parser.DefaultJSONParser;
    import com.alibaba.fastjson.parser.deserializer.DateDeserializer;
    import java.lang.reflect.Type;
    
    /**
     * Copyright �0�8 2016 Jerome Chan. All rights reserved.
     * An extended DateDeseializer for parsing '0000-00-00'.
     * 
     * @author chenjinlong
     * @CreateDate 7/20/16 5:55 PM
     */
    public class JCDateDeserializer extends DateDeserializer {
        public static final JCDateDeserializer instance = new JCDateDeserializer();
    
        public JCDateDeserializer() {
        }
    
        protected <T> T cast(DefaultJSONParser parser, Type clazz, Object fieldName, Object val)
        {
            if (val == null) {
                return null;
            } else if (val instanceof String) {
                String strVal = (String) val;
                if (strVal.length() == 0) {
                    return null;
                } else if (strVal.equals("0000-00-00")) {
                    parser.setDateFormat("yyyy-MM-dd");
                }
            }
            return super.cast(parser, clazz, fieldName, val);
        }
    }
    
    // 示例执行例子
    public class TestDemo {
        public static String jsonStr = "{"dateStr":"0000-00-00"}";
        public static void main(String[] args) {        
            ParserConfig jcParserConfig = new ParserConfig();
            jcParserConfig.putDeserializer(Date.class, JCDateDeserializer.instance);
            DateBeanDemo resultObject = JSON.parseObject(TestDemo.jsonStr, DateBeanDemo.class, jcParserConfig, JSON.DEFAULT_PARSER_FEATURE);
        }
    }
    

    假设觉得这种解析办法可以作为整个项目内的全局特性,感兴趣的话可以将定制好的JCDateDeserializer利用spring框架注入到项目容器中。这同样是对于方案2很不错的延伸。

  • 相关阅读:
    qs.stringify() 和JSON.stringify()的区别 飞鸟和蝉
    js随机数, 范围随机数 飞鸟和蝉
    VUECLI 4的跨域解决方案
    vue3elementadmin
    English dedicate 致力 题献
    解决java web项目导入后出现的问题 cannot be read or is not a valid ZIP file
    SQL 优化原则(转)
    Java Spring Error : Bean property '*****' is not writable or has an invalid setter method.
    c++面试题:#define MIN(A,B) ( (A) <= (B) ? (A) : (B) )
    freemark list 循环变量类型错误问题
  • 原文地址:https://www.cnblogs.com/lupeng2010/p/6811576.html
Copyright © 2011-2022 走看看