我有这样的模特和领域:
@Element(name = "TIMESTAMP")
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
private LocalDateTime date;
我收到回复:
<TIMESTAMP>2016-05-04T13:13:42.000</TIMESTAMP>
但在解析xml到模型时我有错误:
"message": "org.simpleframework.xml.core.PersistenceException: Constructor not matched for class java.time.LocalDateTime",
我也尝试过:
@Element(name = "TIMESTAMP")
@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS")
private LocalDateTime date;
这仍然不起作用。任何的想法 ?我正在使用springframework.xml
lib。
答案 0 :(得分:3)
问题是默认情况下,simplexml lib不知道如何序列化/反序列化新的Java8日期类型。
为了成功,您需要使用自定义转换器。
示例实体(请参阅特殊的@Convert注释)
public class Entity {
@Element(name = "TIMESTAMP")
@Convert(LocalDateTimeConverter.class)
private LocalDateTime date;
// omitted
}
特殊转换器
public class LocalDateTimeConverter implements Converter<LocalDateTime> {
public LocalDateTime read(InputNode node) throws Exception {
String name = node.getValue();
return LocalDateTime.parse(name, DateTimeFormatter.ISO_LOCAL_DATE_TIME);
}
public void write(OutputNode node, LocalDateTime input) {
String value = input.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
node.setValue(value);
}
}
用法
Strategy strategy = new AnnotationStrategy();
Persister persister = new Persister(strategy);
Entity serializedEntity = persister.read(Entity.class, xmlInputStream);
完整来源可在GitHub
上找到