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

时间:2019-02-28 14:24:37

标签: spring spring-boot spring-data-jpa spring-rest

我有一个实体,其日期定义为(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”

感谢您的帮助。

4 个答案:

答案 0 :(得分: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 :(得分: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类型< / strong>)

在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中可用的代码

编码愉快!

答案 2 :(得分:0)

我唯一的想法是将其转换为这样的可读日期:

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

答案 3 :(得分:0)

您可以在spring获取公共字段和方法时在类getter中对其进行更改,或将其存储为TemporalType.DATE。