我有一个以这种方式定义的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 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;
首先,我强烈建议使用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
}
终点测试
代码在GitHub https://github.com/karl-codes/cookie-monster中提供
快乐的编码!
我唯一的想法是将它转换为人类可读日期,如下所示:
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss.SSS");
String humanReadableDate = sdf.format(fechaFin);
你可以在类getter中更改它,因为spring选择公共字段和方法,或者像TemporalType.DATE一样存储它。