使用springboot中的java.sql.Timestamp为Swagger中的条目提供多个字段,而不是单个字段



这是我的实体类:

@Entity
@Table(name = "trade_data")
public class TradeData {
//POJO Class- Entity Trade data
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "s_no", unique = true)
private int s_no;

@Column(name = "tradeDate")
private java.sql.Date tradeDate = new java.sql.Date(System.currentTimeMillis());

@Column(name = "effectiveDate")
private java.sql.Date effectiveDate;

@Column(name = "maturityDate")
private java.sql.Date maturityDate;

//error
@Column(name = "creationTimeStamp", insertable = false)
private java.sql.Timestamp CreationTimeStamp = new
java.sql.Timestamp(System.currentTimeMillis());

//error
@Column(name = "VersionTimeStamp", nullable = false)
private java.sql.Timestamp VersionTimeStamp = new
java.sql.Timestamp(System.currentTimeMillis());

//error
@Column(name = "ConfirmationTimeStamp", insertable = false)
private java.sql.Timestamp ConfirmationTimeStamp;
}

所有java.sql.Timestamp变量都为小时、分钟、秒、年、月、日提供了不同的字段,而不是一个单独的字段,而且它也没有在字段中提供预先填充的数据,即使我使用System.currentTimemillis((放置当前时间戳。此外,当我使用@RequestBody时,它应该接受json数据,但它显示了在.中输入数据的字段

这是一张图片供参考:[1] :https://i.stack.imgur.com/T9giP.png

REST API和Swagger不应公开java.sql.Date类。它仅供应用程序内部使用。

在这种情况下,您可以考虑使用LocalDateTime类型。请参阅下面的实体类示例:

@Entity
@Table(name = "trade_data")
public class TradeData {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "s_no", unique = true)
private int s_no;

@Column(name = "tradeDate")
private LocalDate tradeDate = LocalDate.now(ZoneId.systemDefault());;

@Column(name = "effectiveDate")
private LocalDate effectiveDate;

@Column(name = "maturityDate")
private LocalDate maturityDate;
}

您可能还想考虑引入一个单独的DTO类,该类将在Swagger和RESTneneneba API中公开,而不是实体类。关于使用DTO类,可能会有不同的意见,这在很大程度上取决于您的配置和用例。总的来说,这不是一个坏主意。

相关内容

最新更新