在春季启动应用程序中获取响应的额外字段



在我的春季启动应用程序中,我有预订控制器,它具有相应的服务,存储库和控制器。我的预订模型是这样的:

@JsonFormat(pattern = "yyyy-MM-dd")
@Column(name = "datetime")// corresponds to value 
private Date date;
public Date getDatetime() {
return this.date;
}
public void setDateTime(Date dateTime) {
this.date = dateTime;
}

控制器

@GetMapping("api/booking_details/{userEmail}")
@ResponseBody
public  ResponseEntity<List<Booking>>  getDetails(

@PathVariable @Email String userEmail) {

return new ResponseEntity<>(bookService.findByEmail(userEmail), HttpStatus.OK);
}

对应的get请求是

api/booking_details/

我得到的响应是:

{
"datetime": "2021-09-12T16:01:04.000+00:00",
"date": "2021-09-12"
}

谁能告诉我有两个值响应的原因是什么?

问题是getter和setter方法没有被识别为date parameter'sgetter和setter方法。你可以做两件事,

将getter和setter方法的名称重命名如下,

public Date getDate() {
return this.date;
}
public void setDate(Date date) {
this.date = date;
}

或者使用@JsonProperty("date")注释来注释getter和setter方法。只对getter方法添加注释也是足够的。

@JsonProperty("date")
public Date getDatetime() {
return this.date;
}
@JsonProperty("date")
public void setDateTime(Date dateTime) {
this.date = dateTime;
}

看起来像"日期"属性和getDateTime()方法的返回值正在被序列化。

我通常不会期待"日期"。属性,这是私有的,得到序列化,但也许是因为你有@JsonFormat注释?

getDateTIme()返回值是序列化的,因为它的名字表明它是一个Java Bean属性。

如果你正在寻找的只是格式化日期,我会尝试移动@JsonFormat注释到方法。