我有字段initiationDate
,它通过ToStringSerializer
类序列化为ISO-8601格式.
@JsonSerialize(using = ToStringSerializer.class)
private LocalDateTime initiationDate;
当我收到以下JSON时,
...
"initiationDate": "2016-05-11T17:32:20.897",
...
我想通过LocalDateTime.parse(CharSequence text)
工厂方法反序列化它。我所有的尝试都以com.fasterxml.jackson.databind.JsonMappingException
结束
不能实例化类型为简单类型的值,类
java.time.LocalDateTime
从String
值('2016-05-11T17:32:20.897'
);没有单一的String
构造函数/工厂方法。
我怎样才能做到这一点?如何指定工厂方法?
编辑:
通过将jsr310 310模块包含到项目中并将@JsonDeserialize
与LocalDateTimeDeserializer
结合使用,解决了这个问题。
@JsonSerialize(using = ToStringSerializer.class)
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
private LocalDateTime initiationDate;
发布于 2016-05-11 15:24:02
Vanilla没有从任何JSON字符串值中反序列化(一个LocalDateTime
对象)的方法。
你有几个选择。您可以创建和注册您自己的JsonDeserializer
,它将使用LocalDateTime#parse
。
class ParseDeserializer extends StdDeserializer<LocalDateTime> {
public ParseDeserializer() {
super(LocalDateTime.class);
}
@Override
public LocalDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
return LocalDateTime.parse(p.getValueAsString()); // or overloaded with an appropriate format
}
}
...
@JsonSerialize(using = ToStringSerializer.class)
@JsonDeserialize(using = ParseDeserializer.class)
private LocalDateTime initiationDate;
或者,可以将扩展添加到类路径中,并向ObjectMapper
注册适当的Module
。
objectMapper.registerModule(new JavaTimeModule());
让杰克逊替你做皈依。在内部,这与标准格式之一一起使用LocalDateTime#parse
。幸运的是,它支持这样的值
2016-05-11T17:32:20.897
从盒子里出来。
发布于 2017-06-05 14:02:02
对于那些想要解析自定义日期时间格式的人。
1)添加依赖项
compile "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.8.8"
2)日期时间格式的Json注释。
public class ClientRestObject {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime timestamp;
}
3)在Java8中注册ObjectMapper模块
private static ObjectMapper buildObjectMapper() {
ObjectMapper objectMapper = new ObjectMapper();
//To parse LocalDateTime
objectMapper.registerModule(new JavaTimeModule());
return objectMapper;
}
发布于 2022-05-04 18:04:04
ObjectMapper objectMapper = new ObjectMapper();
//To parse LocalDateTime
objectMapper.registerModule(new JavaTimeModule());
这对我有用,谢谢!
https://stackoverflow.com/questions/37166217
复制相似问题