我有一个实体,其日期定义为(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”
感谢您的帮助。
答案 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
}
终点测试
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。