Spring Data Rest以毫秒格式返回日期

问题描述 投票:0回答:4

我有一个以这种方式定义的Dates(java.util.Date)字段的实体:

@Temporal(TemporalType.TIMESTAMP)
private Date fechaInicio;

@Temporal(TemporalType.TIMESTAMP)
private Date fechaFin;

我有RestController来获取实体,问题是我得到的格式是日期毫秒:

{"id":1,"tipoPlanId":320,"precio":155000.0,
"cantidad":6,"fechaInicio":1546300800000,"fechaFin":1551312000000}

我不知道为什么不返回Spring数据休息的默认日期格式“2019-02-10T06:15:16.000 + 0000”

谢谢你的帮助。

spring spring-boot spring-data-jpa spring-rest
4个回答
1
投票

我正在使用Spring 2.x并且对我来说Date以正确的格式返回。但是,您也可以通过以下方式强制执行:

  • 在属性文件中添加spring.jackson.serialization.write-dates-as-timestamps=false
  • 或者用@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")注释你的成员变量

所以,在你的情况下,类将是:

@Temporal(TemporalType.TIMESTAMP)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private Date fechaInicio;

@Temporal(TemporalType.TIMESTAMP)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
private Date fechaFin;

1
投票

首先,我强烈建议使用java.time.LocalDateTime / java.time.LocalDate而不是java.util.Date(使用java.util.Date时,时区处理是一场噩梦,你最终可能会插入错误的日期/时间在您的数据库中),使用@JsonFormat格式化日期可能只会修复格式问题,但您在处理日期/时间戳值时可能会遇到数据差异。

如果使用SpringBoot,则在Spring Context中注册了格式化程序,用于处理LocalDate / LocalDateTime,您可以使用此数据类型而无需对配置进行任何更改。

现在,如果您不使用Spring Boot,您可能需要在配置中注册LocalDate / LocalDateTime格式化程序(请参阅此文章How to register global databinding for LocalDate in spring mvc?,请注意您必须为时间戳注册LocalDateTime类型)

在Rest / Spring中,日期/时间戳处理并不是一件小事,但请相信我,如果你实现LocalDate或LocalDateTime,你不会试图找出在数据库中插入错误值的某些日期/时间戳有什么问题。 。

示例类

DTO

public class Cookie {
    private long id;
    private LocalDateTime expirationDate;

    //Getters/setters and other stuff

}

调节器

@RestController
@RequestMapping("/chocolateCookies")
public class ChocolateCookieApi extends CookieApi<ChocolateCookie> {

    @GetMapping("/{cookieId}")
    public ResponseEntity<Cookie> findCookie(@PathVariable long cookieId) {
        final Cookie cookie = new Cookie();
        cookie.setId(cookieId);
        cookie.setExpirationDate(LocalDateTime.now().plusWeeks(4));
        return new ResponseEntity<>(cookie, HttpStatus.OK);
    }

    //Other cookie stuff

}

终点测试

enter image description here

代码在GitHub https://github.com/karl-codes/cookie-monster中提供

快乐的编码!


0
投票

我唯一的想法是将它转换为人类可读日期,如下所示:

    SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss.SSS");
    String humanReadableDate = sdf.format(fechaFin);

0
投票

你可以在类getter中更改它,因为spring选择公共字段和方法,或者像TemporalType.DATE一样存储它。

© www.soinside.com 2019 - 2024. All rights reserved.