All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.pugwoo.dbhelper.json.MultiDateDeserializer Maven / Gradle / Ivy

package com.pugwoo.dbhelper.json;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import com.fasterxml.jackson.databind.node.IntNode;
import com.fasterxml.jackson.databind.node.LongNode;

import java.io.IOException;
import java.text.ParseException;
import java.util.Date;

public class MultiDateDeserializer extends StdDeserializer {
	
	private static final long serialVersionUID = 1L;

	public MultiDateDeserializer() {
		this(null);
	}
	public MultiDateDeserializer(Class vc) {
		super(vc);
	}
	
	@Override
	public Date deserialize(JsonParser jp, DeserializationContext context) throws IOException {
		JsonNode node = jp.getCodec().readTree(jp);

		// 针对时间戳做优化
		if(node instanceof LongNode || node instanceof IntNode) {
			long timestamp = node.asLong();
			if(timestamp < 4200000000L) { // 小于42亿认为是秒
				return new Date(timestamp * 1000L);
			} else {
				return new Date(timestamp);
			}
		}

		String date = node.asText();
		if(date == null) {
			return null;
		}
		date = date.trim();
		if(date.isEmpty()) {
			return null;
		}
		
		try {
			return NimbleOrmDateUtils.parseThrowException(date);
		} catch (ParseException e) {
			throw new JsonParseException(jp,
			    "cannot parse date: \"" + date + "\". Supported formats: "
			    + NimbleOrmDateUtils.DATE_FORMAT_REGEXPS.values());
		}
	}
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy