我有字段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
复制相似问题