首页 > 解决方案 > 使用带有 restTemplate 的 Spring-Boot 2.0.1 从 MongoDB ISODate 字段中检索数据

问题描述

我无法从我的 MongoDB 表中的 ISOdate 字段中检索正确的数据。

在我的 MongoDb 集合中,我的字段 dtInicio 具有以下值:

{"dtInicio" : ISODate("2018-07-01T00:00:00.000+0000")} 

并在执行 mongoTemplated 查询之后

Query query = new Query();       
query.addCriteria(Criteria.where("cp").is(cpValue));
List<Vo> list = mongoTemplate.find(query,Vo.class,COLLECTION);
Vo vo = list.get(0);
Date dt = vo.getDataInicio(); 

我在 dt 变量中得到了错误的值。

getDataInicio() 返回错误值:“Sat Jun 30 21:00:00 BRT 2018”

但在集合字段 (dtInicio) 中有另一个值:“(ISODate("2018-07-01T00:00:00.000+0000"))”

我的 POJO Vo 被注释为:

@JsonFormat(shape = JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd")
@JsonProperty("inicio")
@DateTimeFormat(style="yyyy-MM-dd")
@Field("dtInicio")
private Date dataInicio;

为什么我的查询返回错误值?我预计 2018-07-01 00:00:00 而不是 2018-06-30 21:00:00

Tks伙计们...

标签: mongodbspring-boot

解决方案


为了解决这个问题,我需要在我的 POJO 字段中包含“locale”和“timezone”:

@JsonFormat(shape = JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd",
                                            locale = "pt-BR", 
                                            timezone = "Brazil/East")
@JsonProperty("inicio")
@Field("dtInicio")
private Date dataInicio;

推荐阅读