使用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很不錯的延伸。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM