使用google的gson在对日期进行处理时,碰到非法的日期,会出现异常,如DB字段默认值为"0000-00-00 00:00:00",可通过自定义日期解析器来解决,代码如下:
import com.google.gson.*; import java.lang.reflect.Type; import java.util.Date; public class JsonUtils { private static Gson GSON = null; static { GsonBuilder builder = new GsonBuilder(); builder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() { public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { String dateStr = json.getAsString();
if(!dateStr.startsWith("2")){ return null; } return DateUtils.parse(dateStr);//转换为日期 } }).setDateFormat("yyyy-MM-dd HH:mm:ss");//指定日期格式 GSON = builder.create(); } public static Gson getGSON(){ return GSON; } public static <T> T convert(Object source, Class target){ return (T) GSON.fromJson(GSON.toJson(source), target); }}//需要setDateFormat,才能按指定格式返回
在deserialize方法中按自己的要求处理即可,此处是将所有不是2开头的日期都转为null值
PS:需要指定日期的格式(setDateFormat), json.getAsString()才会按指定格式返回字符串,比如不是2开头的年份,都清空