Oracle
 sql >> база данни >  >> RDS >> Oracle

POSTMAN връща полета за дата с променени стойности

Postman не добавя нищо към JSON отговор от сървър. Това представяне на дадена дата е генерирано от сървъра и има проблем. Първо, трябва да започнем от това, че не трябва да използвате java.util.Date тъй като използвате Java8 . Има java.time наличен пакет и трябва да го използвате за представяне на време.

toString метод от Date класът използва часовата зона на системата по подразбиране за отпечатване на дата и не трябва да го използвате. java.time.LocalDateTime трябва да работи за вас.

Вероятно вашата бекенд услуга използва някои библиотеки за генериране на JSON отговор. Например Jackson . Конфигурацията му може да е грешна, затова виждате грешни дати. Вижте кода по-долу:

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

Горният код с часова зона, зададена на GMT отпечатва:

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

Но когато променим часовата зона на Etc/GMT-3 , той отпечатва:

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

Трябва да проверите какво се използва за генериране на JSON във вашия случай и конфигурирайте правилно часовата зона. Забележете, че за initialDate не виждаме това поведение, тъй като използвахме java.time.LocalDateTime клас вместо Date .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как записвате масиви в Oracle 10g XE db с помощта на iBatis?

  2. премахнете конкретна дума от низ

  3. Метод за събиране:Процедура EXTEND в базата данни на Oracle

  4. Oracle Managed ODP.NET не може да намери tnsnames.ora

  5. Как можем да определим размера на изходния параметър в съхранената процедура?