使用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();
//需要setDateFormat,才能按指定格式返回
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); }}
在deserialize方法中按自己的要求处理即可,此处是将所有不是2开头的日期都转为null值
PS:需要指定日期的格式(setDateFormat), json.getAsString()才会按指定格式返回字符串,比如不是2开头的年份,都清空