package com.nanjing.water.common.serializer.deserializer;
|
|
import com.fasterxml.jackson.core.JsonParser;
|
import com.fasterxml.jackson.databind.DeserializationContext;
|
import com.fasterxml.jackson.databind.JsonDeserializer;
|
import com.nanjing.water.common.ConstantFactory;
|
import com.nanjing.water.common.util.CalendarUtil;
|
import com.nanjing.water.common.util.NumericUtil;
|
import com.nanjing.water.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<Calendar> {
|
@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);
|
}
|
}
|