sql >> Databáze >  >> RDS >> Oracle

POŠTAČ vrací pole data se změněnými hodnotami

Postman nepřidává nic do JSON odpověď ze serveru. Tato reprezentace daného data byla vygenerována serverem a došlo k problému. Za prvé, měli bychom začít tím, že byste neměli používat java.util.Date protože používáte Java8 . Existuje java.time balíček je k dispozici a měli byste jej použít k zobrazení času.

toString metoda z Date třída používá k tisku data výchozí časové pásmo systému a neměli byste ho používat. java.time.LocalDateTime by vám mělo fungovat.

Vaše backendová služba pravděpodobně používá některé knihovny ke generování JSON Odezva. Například Jackson . Jeho konfigurace může být chybná, proto vidíte nesprávná data. Viz níže kód:

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;
}

Výše uvedený kód s časovým pásmem nastaveným na GMT tisky:

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

Ale když změníme časové pásmo na Etc/GMT-3 , vytiskne:

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

Měli byste zkontrolovat, co se používá ke generování JSON ve vašem případě a správně nakonfigurujte časové pásmo. Všimněte si, že pro initialDate toto chování nevidíme, protože jsme použili java.time.LocalDateTime class namísto Date .



  1. Nejlepší způsob, jak zkontrolovat, zda mysql_query vrátil nějaké výsledky?

  2. Mysql naformátujte řetězec jako XXXXXXXXXXXX až XX-XX-XXXXXXX-X

  3. MYSQL + PHP pro zobrazení dat ze dvou řádků jako jednoho sloupce

  4. Jsou hranaté závorky platné v dotazu SQL?