我有一个 Spring API,可以让我创建并返回调用列表。调用有一个持续时间(可以是秒、分钟或小时),因此我在 API 中使用了类型
Duration
,在 Postgres 数据库中使用了类型 Interval
。
我可以毫无问题地创建呼叫并返回所有呼叫的列表,但持续时间以这种格式显示:例如,
PT15S
15 秒,PT5M30S
5 分 30 秒。
它可以完成工作,但我想以更好的格式显示它:例如 15 秒或 00:05:30。在无需更改类型的情况下,我找不到关于在哪里以及如何执行此操作的明确答案(我想在我的实体和 DTO 中保留持续时间)。
public class MyCallEntity {
@Id
@Column(name = "id", nullable = false)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "date", nullable = false)
private Instant date;
@Type(PostgreSQLIntervalType.class)
@Column(name = "duration", columnDefinition = "interval", nullable = false)
private Duration duration;
}
public class MyCallDto {
private Long id;
private Instant date;
private Duration duration;
}
我尝试使用带有模式 HOURS、MINUTES 和 SECONDS 的
@JsonFormat
注释:@JsonFormat(pattern = "MINUTES")
但这没有任何作用,每当我显示所有呼叫或仅一个呼叫的列表时,我都会收到 PT15S。
有没有办法做到这一点而不必在某些时候更改类型?
在你的 dto 中尝试一下:
public class MyCallDto {
//...
private Duration duration;
@JsonGetter("duration")
public long getDurationInMinutes() {
return duration.toMinutes();
}
@JsonSetter("duration")
public void DurationInMinutes(long duration) {
this.duration= Duration.ofMinutes(duration);
}
}