Date - Problema resta un día al Deserializar JSON en API REST en JAVA con Spring Boot 1.5.4

EL PROBLEMA

Tengo la clase MCPersona donde recibo su fecha de nacimiento

public class MCPersona implements Serializable{
    private static final long serialVersionUID=1L;
    private String dni;
    private String apellidoPaterno;
    private String apellidoMaterno;
    private String nombres;
    private Date fechaNacimiento;
    ... getters and setters
}

Cuando envió desde la aplicación cliente un JSON con una fecha de nacimiento en formato yyyy-MM-dd por ejemplo: 1993-03-04 el API REST intercepta ese JSON y lo convierte al objeto MCPersona; sin embargo la fecha es convertida a un DATE 1993-03-03 entonces le ha restado un día.
Este problema tambien a sido reportado en: STACKOVERFLOW y tiene una solución BRASILEÑA, XD.

LA SOLUCIÓN

Guiandonos de la solución brindada en STACKOVERFLOW, redefinimos la clase de la siguiente manera:

public class MCPersona implements Serializable{
    private static final long serialVersionUID=1L;
    private String dni;
    private String apellidoPaterno;
    private String apellidoMaterno;
    private String nombres;
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", locale = "es-PE", timezone = "America/Lima") 
    private Date fechaNacimiento;
    ... getters and setters
}

Como estoy trabajando en Perú le he definido el locale y timezone según este PAIS

INVESTIGACIÓN PENDIENTE

Al definir un locale y timezone estoy casi seguro que hemos perdido internacionalización (no lo he comprobado) pues al tratarse de un aplicativo web con un browser (front-end) que se puede abrir en cualquier parte del mundo sin embargo nuestro back-end trabajara las fechas para un lugar especifico. Por ahora esto soluciona la realidad del aplicativo que estoy realizando. Pronto escribiré algún articulo donde compruebe si se ha perdido internacionalización AQUI

MI META

Compartir el conocimiento para que la comunidad de desarrolladores siga creciendo. El conocimiento es de todos así que COMPARTELO.

Comentarios

Publicar un comentario