【问题标题】:Unable to validate date type in Integration test cases无法验证集成测试用例中的日期类型
【发布时间】:2016-09-28 08:39:49
【问题描述】:

我们正在为 Rest API 编写集成测试用例,其中我们正在验证 Response DTO 的所有属性的类型。在 DTO 中,我们有一个 java.util.Date 类型的属性。 但是,当它尝试使用时

 .andExpect(jsonPath("$.testDate", isA(Date.class)))

它没有通过我们的测试用例

预期:是 java.util.Date 的一个实例 但是: 是 java.lang.Long

请告诉我如何使用集成测试用例验证 Date 类型。

【问题讨论】:

  • 日期被序列化为毫秒,我认为这是默认的。假设您使用的是 Jackson,您可能希望在序列化配置中禁用属性写入时间戳。

标签: java spring rest date


【解决方案1】:

Spring 使用 Jackson 来序列化 JSON,而 Jackson 默认将日期序列化为毫秒,正如 @Reddy 所说。如果您想要以下格式的日期,请尝试使用 @Temporal 注释来注释 DTO 中的 testDate 字段:YYYY-MM-DD

如果您想要其他格式,请尝试使用

@DateTimeFormat(pattern = "dd/MM/yyyy")

然后用你想要的改变图案。

如果这两种解决方案都不起作用,您必须为日期字段定义一个自定义序列化程序来解决问题,并使用 @JsonSerialize(using=JsonDateSerializer.class) 注释来注释日期字段的 get 方法。

JsonDateSerializer 将是您的自定义序列化程序类。

有关自定义序列化程序的更多详细信息,请参阅此答案 https://stackoverflow.com/a/38186623/6503002

【讨论】:

  • @Reddy 和 amicoderozer.. 感谢您宝贵的时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多