【发布时间】:2023-03-15 00:04:02
【问题描述】:
我已按照 Spring.io 指南使用 rest (https://spring.io/guides/gs/accessing-mongodb-data-rest/) 访问 MongoDB 数据,并且可以将文档保存到 mongo。
当我尝试将日期字段添加到 POJO 并将日期设置为 new Date() 对象时,它只是在保存到 mongo 时将值保存为 null。
我创建了一个非常基本的@RestController,它工作正常(传入请求正文,并使用我的MongoRepository 类将其保存下来),通过其余控制台保存文档。我尝试在此处创建一个新日期并在将其保存到 Mongo 之前对其进行设置,但这给了我类似 "createdDate": 1472394366324 的信息。
我可以将日期作为字符串保存到 Mongo 中,但我想要的是能够以日期格式保存日期,这样我就可以使用基本的“日期之间”查询来查询它们(所以像这样,确切的格式没关系 - "date" : ISODate("2014-02-10T10:50:42.389Z")。我可以编写查询以通过参数获取值,但要使“日期之间”查询正常工作,我需要能够将日期值存储到 Mongo 中。
最简单的方法是什么?
编辑:
Pojo 类 -
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@Document(collection = "Musicians")
public class Musician {
@Id
private String id;
private String firstName;
private String lastName;
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private Date createdDate = new Date();
public Musician() {}
public Musician(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
//createdDate = new Date();
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public Date getCreatedDate() {
return createdDate;
}
public void setCreatedDate(Date createdDate) {
this.createdDate = createdDate;
}
}
RestController 类 -
@RestController
@RequestMapping(value = "/musicians")
public class MusicianController {
@Autowired
MusicianRepository musicianRepository;
@Autowired
MongoTemplate mongoTemplate;
@RequestMapping(method = RequestMethod.POST, value = "")
public ResponseEntity<HttpStatus> createMusician(@RequestBody Musician musician) {
Musician musicianIn = musician;
musicianRepository.save(musicianIn);
return new ResponseEntity(HttpStatus.ACCEPTED);
}
@RequestMapping(method = RequestMethod.GET, value = "")
public ResponseEntity<List<Musician>> getMusicians() {
List<Musician> musicians = musicianRepository.findAll();
return new ResponseEntity<List<Musician>>(musicians, HttpStatus.OK);
}
}
【问题讨论】:
-
你可以尝试在你的POJO的属性中添加
@CreatedDate注解,例如:class MyObject{ @CreatedDate Date date; } -
这似乎没有任何改变。我已经添加了注释,如果我将 new Date() 分配给我的 createdDate 字段,它在 mongo 中为空,如果我在保存到 mongo 之前调用其余端点中的设置器,它会给我一个类似上面的数字。我应该做其他事情来让它工作吗?为什么在 pojo 构造函数中设置日期会创建一个空值?
标签: spring mongodb spring-boot