【发布时间】:2021-11-30 14:19:33
【问题描述】:
我正在尝试找到一种方法来配置对象序列化过程(使用 Jackson)以将 Duration 字段序列化为毫秒(不是秒+毫秒,这似乎是默认值)。
我有一个代表某些事件的类,例如:
import java.time.Duration;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
public class SomeEvent {
private Duration durationOfEvent;
}
如果我运行以下代码,它会创建一个实例并获得一个 json 表示,那么我会得到如下所示的输出
Duration duration = Duration.ofMillis(500);
SomeEvent someEvent = SomeEvent.builder().durationOfEvent(duration).build();
ObjectMapper objectMapper = enhancedObjectMapper();
String json = objectMapper.writeValueAsString(someEvent);
System.out.println(json);
输出:
{"durationOfEvent":0.500000000}
我想得到的是:
{"durationOfEvent":500}
我希望它为毫秒的原因是消耗 json 的进程比十进制数更容易处理毫秒。
我宁愿为这个类中的这个特定字段添加一些注释或自定义序列化,而不是为 java.time.Duration 的所有实例,因为应用程序中还有其他类也使用 Duration,我不这样做'不想影响他们。我之前尝试过一个处理所有 Duration 的自定义序列化程序,但这种方法破坏了与使用 Duration 的其他类相关的测试。
我拥有的Jackson库的版本是:2.12.4
【问题讨论】:
-
我认为你的
SomeEvent类中不应该有Duration对象。改用number type,然后用Duration.ofMillis()填充它。测试了你的代码,我得到了这个:{"durationOfEvent":{"seconds":0,"units":["SECONDS","NANOS"],"zero":false,"negative":false,"nano":500000000}}
标签: java serialization jackson java-time jackson2