REST Server和Postman之间的日期值不匹配

时间:2019-07-11 10:58:21

标签: spring rest date spring-restcontroller

我正在使用spring框架开发REST服务器。

我正在返回Model对象的列表(雇员,其中包含Date字段

所以我的Model类看起来像:

Class Employee {
 private String empId;
 private Date joinDate;
}

我的控制器方法如下:

@GetMapping("/Employee")
    public List<EmployeeLeaves> searchEmployeeLeaveDetails(@RequestParam(value = "filter", required = false) String filter) throws Exception {

        List<Employee> empList = service.searchEmployee(filter);

        return empList;
    }

当我尝试从邮递员那里调用此api作为响应时,它总是显示joinDate比实际日期少1天。

我调试了此问题,发现在控制器中日期是正确的

下面是测试/调试结果

Value for joinDate(Column type is Date) in Database: '2018-10-27'
Value for joinDate(java.sql.timestamp) in Controller: 2018-10-27 00:00:00.0
Value retried in postman's JSON response : "2018-10-26T18:30:00.000+0000"

任何人都知道为什么邮递员回复将日期显示为26而不是27? 两者之间是否存在任何与时区相关的因素?

1 个答案:

答案 0 :(得分:1)

您应该避免使用Date,因为它现在是旧类。 Java 8引入了基于ISO日历系统的new API for dates, times, instants and durations

Date最接近的等效项是Instant,它表示时间戳记,即UTC时间轴上的时刻。但是您可能想改用OffsetDateTime,因为它存储了所有日期和时间字段以及与UTC /格林威治标准时间的偏移量。

引用OffsetDateTime类文档:

  

打算在更简单的应用程序中使用ZonedDateTimeInstant为数据建模。在更详细地建模日期时间概念时,或者在与数据库或网络协议进行通信时,可以使用此类[OffsetDateTime]。