当前位置: 首页 > 知识库问答 >
问题:

邮递员正在返回具有更改值的日期字段

越飞翮
2023-03-14

我正在使用一个REST服务,并且收到一个JSON,其日期属性与我的数据库中的属性不匹配。我有两个名为“initialdate”和“finaldate”的字段。在数据库中,它们如下所示:

07/MAR/19 00:00:00
07/SEP/19 23:59:59

数据库时区:

select dbtimezone from dual;
+00:00
public class Klass {

 @NotNull
 private Date initialDate; //initialDate.toString() "Thu Mar 07 00:00:00 CLT 2019"

 @NotNull
 private Date finalDate; // finalDate.toString() "Sat Sep 07 23:59:59:9 CLT 2019"

 public Date initialDate() {
    return this.initialDate == null ? null : new Date(initialDate.getTime());
 }

 public void setInitialDate() {
     this.initialDate = initialDate == null ? null : new Date(initialDate.getTime());
 }

 public Date finalDate() {
    return this.finalDate == null ? null : new Date(finalDate.getTime());
 }

 public void setFinalDate() {
    this.finalDate = finalDate == null ? null : new Date(finalDate.getTime());
 }

}
initialDate: "2019-03-07T03:00:00Z",
finalDate: "2019-09-08T02:59:59Z"

共有1个答案

高茂
2023-03-14

Postman不向服务器的JSON响应添加任何内容。这个给定日期的表示是由服务器生成的,有一个问题。首先,我们应该从您不应该使用java.util.date开始,因为您使用的是java8。有java.time包可用,您应该使用它来表示时间。

date类中的ToString方法使用默认系统的时区来打印日期,您不应该使用它。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;
}
{
  "initialDate" : "2019-03-07T00:00:00",
  "finalDate" : "2019-09-07T23:59:59"
}
{
  "initialDate" : "2019-03-07T00:00:00",
  "finalDate" : "2019-09-08T02:59:59"
}

您应该检查在您的情况下用于生成JSON的内容,并正确配置时区。注意,对于InitialDate,我们没有看到这种行为,因为我们使用了java.time.LocalDateTime类而不是Date

 类似资料:
  • 我正在做一个关于林达的烧瓶课程,但遇到了一个例子的问题。https://www.lynda.com/Flask-tutorials/Web-API-Development-Flask/521200-2.html 我做一个简单的职位,它的工作时,从一个基本的网络表单,但从邮递员失败。我想这是因为邮递员对请求的编码不同,但不知道为什么会这样,或者为什么烧瓶不能读取它。 查理斯截获的请求: 返回: 从简

  • 问题内容: 这是我的SQL Server表 这似乎很容易做到,但我不知道为什么会被卡住。我只想为每个id选择max(date)和该max(date)处的值。我想忽略相对于每个ID而言不是max(date)的所有其他日期。 这是我希望表格看起来像的样子: 我尝试通过使用max(date)进行分组,但没有进行任何分组。我不确定自己在做什么错。在此先感谢您的帮助! 问题答案: 您可以使用以下内容: 观看

  • 我正在创建一个递归导航迷宫的程序。代码: 然而,每当我到达死胡同时,它都不会回溯。当我调试时,它表明当程序从递归或“回溯”返回时,我的起始值专注于停留在我的死胡同空间。 例如: 9是我的出发点。2是我的退出。4是我的道路。1 表示墙壁。当我到达一个死胡同时(在本例中为第 7 行,第 2 列)。我的立场是等于整个程序其余部分的死胡同空间。这是为什么呢?

  • 问题内容: 我有一个传统的postgres db,它具有将日期列强制转换为字段(不要问)。我想更改表和列以包含实际日期。因为这有效: 我天真地认为这可能有效: 但事实并非如此。有无知的线索吗? 问题答案: 这 恰好 符合OP的要求。我们这里有一个简单的思想/错别字。 在手册中了解有关ALTER TABLE的更多信息 。 演示: 提示:您写的不是。

  • 检查这个的步骤 添加相关信息如下,我正在设置show_mature和newsletter_subscribedtrue 预期:将show_mature和newsletter_subscribed值设置为true实际:show_mature和newswetter_sSubscribed的值为false 如果有人能让我知道为什么会发生这种情况,我会非常感激吗?谢谢

  • 问题内容: 我正在尝试为表中的每个用户获取一个SUM(),但是MySQL返回错误的值。 这就是它的外观(http://sqlfiddle.com/#!2/7b988/4/0) 但这就是它的外观(http://sqlfiddle.com/#!2/7b988/2/0) 这是我要运行的查询: 我究竟做错了什么? 问题答案: 试试这个查询: SQLFiddle-> http://sqlfiddle.com