如何更改 Duration 的格式?

问题描述 投票:0回答:1

我有一个 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。

有没有办法做到这一点而不必在某些时候更改类型?

spring duration
1个回答
0
投票

在你的 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);
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.