Skip to content

Instantly share code, notes, and snippets.

@svaponi
Created March 1, 2017 13:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save svaponi/dfd8224375bb51913c14ad446ec195a1 to your computer and use it in GitHub Desktop.
Save svaponi/dfd8224375bb51913c14ad446ec195a1 to your computer and use it in GitHub Desktop.
package it.miriade.commons.web.resources.utils;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
/**
* Deserializer for {@link Date} attributes in JSON Resources.
*
* @author svaponi
*/
public class DateDeserializer extends JsonDeserializer<Date> {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private static final String ISO_DATE = ("yyyy-MM-dd'T'HH:mm'Z'");
private SimpleDateFormat formatter;
public DateDeserializer() {
super();
this.formatter = new SimpleDateFormat(ISO_DATE);
}
public DateDeserializer(String dateFormat) {
super();
if (StringUtils.isNotBlank(dateFormat))
this.formatter = new SimpleDateFormat(dateFormat);
else
this.formatter = new SimpleDateFormat(ISO_DATE);
}
@Override
public Date deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
String timestamp = jp.getText().trim();
try {
return formatter.parse(timestamp);
} catch (ParseException e) {
logger.warn(e.getMessage());
return new Date();
}
}
}
package it.miriade.commons.web.resources.utils;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import org.apache.commons.lang3.StringUtils;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
/**
* Serializer for {@link Date} attributes in JSON Resources.
*
* @author svaponi
*/
public class DateSerializer extends JsonSerializer<Date> {
private static final String ISO_DATE = ("yyyy-MM-dd'T'HH:mm'Z'");
private SimpleDateFormat formatter;
public DateSerializer() {
super();
this.formatter = new SimpleDateFormat(ISO_DATE);
}
public DateSerializer(String dateFormat) {
super();
if (StringUtils.isNotBlank(dateFormat))
this.formatter = new SimpleDateFormat(dateFormat);
else
this.formatter = new SimpleDateFormat(ISO_DATE);
}
@Override
public void serialize(Date date, JsonGenerator gen, SerializerProvider provider)
throws IOException, JsonProcessingException {
TimeZone tz = TimeZone.getTimeZone("UTC");
formatter.setTimeZone(tz);
String formattedDate = formatter.format(date);
gen.writeString(formattedDate);
}
}
package it.miriade.commons.web.resources.utils;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
/**
* @author svaponi
*/
public class EasyDecodeDateDeserializer extends JsonDeserializer<Date> {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private static final String EASY_DECODE_TIMESTAMP = ("yyyy-MM-dd-HH-mm-ss-SSS");
private static final SimpleDateFormat formatter = new SimpleDateFormat(EASY_DECODE_TIMESTAMP);
@Override
public Date deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
String timestamp = jp.getText().trim();
try {
return formatter.parse(timestamp);
} catch (ParseException e) {
logger.warn(e.getMessage());
return new Date();
}
}
}
package it.miriade.commons.web.resources.utils;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
/**
* Usa il formato {@value #EASY_DECODE_TIMESTAMP} facile da decodificare lato client, basta splittare per '-' e si
* ottiene un array con tutte le componenti del timestamp.<br/>
* Il JSON risultante avrà un campo Date in formato string human-readble, esempio
* <strong>2015-04-24-09-58-58-012</strong>.
*
* @author svaponi
*/
public class EasyDecodeDateSerializer extends JsonSerializer<Date> {
private static final String EASY_DECODE_TIMESTAMP = ("yyyy-MM-dd-HH-mm-ss-SSS");
private static final SimpleDateFormat formatter = new SimpleDateFormat(EASY_DECODE_TIMESTAMP);
@Override
public void serialize(Date date, JsonGenerator gen, SerializerProvider provider) throws IOException, JsonProcessingException {
String formattedDate = formatter.format(date);
gen.writeString(formattedDate);
}
}
package it.miriade.commons.web.resources.utils;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
/**
* @see EasyDecodeEpochSerializer
* @author svaponi
*/
public class EasyDecodeEpochDeserializer extends JsonDeserializer<Long> {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
private static final String EASY_DECODE_TIMESTAMP = ("yyyy-MM-dd-HH-mm-ss-SSS");
private static final SimpleDateFormat formatter = new SimpleDateFormat(EASY_DECODE_TIMESTAMP);
@Override
public Long deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
String timestamp = jp.getText().trim();
try {
return formatter.parse(timestamp).getTime() / 1000;
} catch (ParseException e) {
logger.warn(e.getMessage());
return new Date().getTime() / 1000;
}
}
}
package it.miriade.commons.web.resources.utils;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
/**
* Usa il formato {@link Format.EASY_DECODE_TIMESTAMP} facile da decodificare lato client, basta splittare per '-' e si
* ottiene un array con tutte le componenti del timestamp.<br/>
*
* @author svaponi
*/
public class EasyDecodeEpochSerializer extends JsonSerializer<Long> {
private static final String EASY_DECODE_TIMESTAMP = ("yyyy-MM-dd-HH-mm-ss-SSS");
private static final SimpleDateFormat formatter = new SimpleDateFormat(EASY_DECODE_TIMESTAMP);
@Override
public void serialize(Long secondsFrom1970, JsonGenerator gen, SerializerProvider provider) throws IOException, JsonProcessingException {
Date date = new Date(secondsFrom1970 * 1000);
String formattedDate = formatter.format(date);
gen.writeString(formattedDate);
}
}
package it.miriade.commons.web.resources.utils;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
/**
* @author matteo
*/
public class UnixDateDeserializer extends JsonDeserializer<Date> {
@Override
public Date deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
String timestamp = jp.getText().trim();
return deserialize(timestamp);
}
public Date deserialize(String timestamp) {
try {
return new Date(new BigDecimal(timestamp).multiply(new BigDecimal(1000)).longValue());
} catch (NumberFormatException e) {
return null;
}
}
}
package it.miriade.commons.web.resources.utils;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
/**
* @author matteo
*/
public class UnixDateSerializer extends JsonSerializer<Date> {
@Override
public void serialize(Date value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {
if(value != null){
Calendar cal = Calendar.getInstance();
cal.setTime(value);
cal.setTimeZone(TimeZone.getTimeZone("GMT"));
long gmtTime = cal.getTime().getTime();
jgen.writeString((gmtTime/1000)+"");
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment