如何让ObjectMapper支持处理Duration
时间: 2023-07-05 15:33:36 浏览: 46
要让ObjectMapper支持处理Duration,可以通过自定义序列化和反序列化器来实现。首先,需要创建一个实现JsonSerializer接口的自定义序列化器,代码如下:
```java
public class DurationSerializer extends JsonSerializer<Duration> {
@Override
public void serialize(Duration value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeString(value.toString());
}
}
```
接着,创建一个实现JsonDeserializer接口的自定义反序列化器,代码如下:
```java
public class DurationDeserializer extends JsonDeserializer<Duration> {
@Override
public Duration deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
return Duration.parse(p.getValueAsString());
}
}
```
最后,在ObjectMapper中注册这两个自定义序列化器和反序列化器,代码如下:
```java
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addSerializer(Duration.class, new DurationSerializer());
module.addDeserializer(Duration.class, new DurationDeserializer());
mapper.registerModule(module);
```
这样,ObjectMapper就可以正确地序列化和反序列化Duration类型的属性了。