Provides (Spring) to/from FileMaker Input/output date serialization as Instant using any custom format ( ie. yyyy-MM-dd HH:mm:ss )
- Always define dates as Instant in your java app or service
- Define dates as Timestamp in FileMaker
your_root_package.config.ConfigurationProperties
package your_root_package.config;
import your_root_package.DateConverter;
import com.fasterxml.jackson.databind.Module;
import com.fasterxml.jackson.databind.module.SimpleModule;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import java.time.Instant;
@ConfigurationProperties(prefix = "application", ignoreUnknownFields = false)
public class ApplicationProperties {
/** CUSTOM DATE SERIALIZER/DESERIALIZER TO ACCEPT ANY PARTICULAR DATE FORMAT **/
@Bean
public Module module() { // register as module
SimpleModule module = new SimpleModule();
module.addSerializer(Instant.class, new DateConverter.Serialize()); // register as serialize class for Instant.class
module.addDeserializer(Instant.class, new DateConverter.Deserialize()); // register as deserialize class for Instant.class
return module;
}
}
your_root_package.config.DateConverter
package your_root_package.config;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import org.springframework.boot.jackson.JsonComponent;
/** CUSTOM DATE SERIALIZER/DESERIALIZAER TO ACCEPT ANY PARTICULAR DATE FORMAT **/
@JsonComponent
public class DateConverter {
private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
private static final SimpleDateFormat sdf1 = new SimpleDateFormat(DATE_FORMAT);
public static class Serialize extends JsonSerializer<Instant> {
@Override
public void serialize(Instant value, JsonGenerator jgen, SerializerProvider provider) {
try {
if (value == null) {
jgen.writeNull();
}
else {
jgen.writeString(DateTimeFormatter.ofPattern(DATE_FORMAT).withZone(ZoneId.systemDefault()).format(value) );
}
}catch (Exception e){
e.printStackTrace();
}
}
}
public static class Deserialize extends JsonDeserializer<Instant> {
@Override
public Instant deserialize(com.fasterxml.jackson.core.JsonParser jp, DeserializationContext ctxt) throws IOException {
try {
String dateAsString = jp.getText();
if (dateAsString==null) {
return null;
} else {
return Instant.ofEpochMilli(sdf1.parse(dateAsString).getTime());
}
}catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
}