package com.lunhan.xxx.common.serializer.deserializer; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import com.lunhan.xxx.common.ConstantFactory; import com.lunhan.xxx.common.util.CalendarUtil; import com.lunhan.xxx.common.util.NumericUtil; import com.lunhan.xxx.common.util.StringUtil; import java.io.IOException; import java.util.Calendar; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 自定义json反序列化 Calendar 属性 * @author linliu * @date 2020-05-12 */ public class CQCalendarDeSerializer extends JsonDeserializer { @Override public Calendar deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { String value = p.getText(); if(StringUtil.isMatch(value, ConstantFactory.REGEX_DATE)) { return CalendarUtil.fromDateStr(value); } else if(StringUtil.isMatch(value, ConstantFactory.REGEX_DATETIME)) { return CalendarUtil.fromDateTimeStr(value); } else if(StringUtil.isMatch(value, ConstantFactory.REGEX_DATETIME_FULL)) { return CalendarUtil.fromDateTimeMSStr(value); } else if(StringUtil.isMatch(value, ConstantFactory.REGEX_DATETIME_JAVA)) { Pattern pattern = Pattern.compile(ConstantFactory.REGEX_DATETIME_JAVA); Matcher matcher = pattern.matcher(value); if(matcher.find()) { String timestamp = matcher.group("timestamp"); return CalendarUtil.fromMillis(NumericUtil.tryParseLong(timestamp)); } } else if(StringUtil.isMatch(value, "^[0-9]{13}$")) { return CalendarUtil.fromMillis(NumericUtil.tryParseLong(value)); } throw new IOException("can't be deserialize as type “Calendar”, " + value); } }