Oracle
 sql >> Base de données >  >> RDS >> Oracle

POSTMAN renvoie des champs de date avec des valeurs modifiées

Postman n'ajoute rien à JSON réponse d'un serveur. Cette représentation de la date donnée a été générée par le serveur et il y a un problème. Tout d'abord, nous devrions commencer par le fait que vous ne devez pas utiliser java.util.Date puisque vous utilisez Java8 . Il y a java.time package disponible et vous devez l'utiliser pour représenter une heure.

toString méthode de Date classe utilise le fuseau horaire par défaut du système pour imprimer la date et vous ne devez pas l'utiliser. java.time.LocalDateTime devrait fonctionner pour vous.

Votre service backend utilise probablement certaines bibliothèques pour générer JSON réponse. Par exemple, Jackson . Sa configuration peut être erronée, c'est pourquoi vous voyez des dates erronées. Voir le code ci-dessous :

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.ToString;

import java.io.IOException;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Date;
import java.util.TimeZone;

public class JsonTimeApp {
    public static void main(String[] args) throws IOException {
        LocalDateTime initialDate = LocalDateTime.of(2019, 3, 7, 0, 0, 0);
        LocalDateTime finalDate = LocalDateTime.of(2019, 9, 7, 23, 59, 59);

        ObjectMapper mapper = new ObjectMapper();
        mapper.enable(SerializationFeature.INDENT_OUTPUT);
        mapper.registerModule(new JavaTimeModule());
        mapper.setTimeZone(TimeZone.getTimeZone("GMT"));
        // or mapper.setTimeZone(TimeZone.getTimeZone("Etc/GMT-3"));

        mapper.writeValue(System.out, new Period(initialDate, Date.from(finalDate.toInstant(ZoneOffset.UTC))));
    }
}

@Data
@AllArgsConstructor
@ToString
class Period {

    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss")
    private LocalDateTime initialDate;

    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss")
    private Date finalDate;
}

Au-dessus du code avec le fuseau horaire défini sur GMT imprime :

{
  "initialDate" : "2019-03-07T00:00:00",
  "finalDate" : "2019-09-07T23:59:59"
}

Mais lorsque nous changeons de fuseau horaire en Etc/GMT-3 , il affiche :

{
  "initialDate" : "2019-03-07T00:00:00",
  "finalDate" : "2019-09-08T02:59:59"
}

Vous devriez vérifier ce qui est utilisé pour générer JSON dans votre cas et configurez correctement le fuseau horaire. Notez que pour initialDate nous ne voyons pas ce comportement puisque nous avons utilisé java.time.LocalDateTime classe au lieu de Date .