Spring,将字符串解析为LocalDateTime

时间:2016-05-05 09:55:03

标签: java xml spring

我有这样的模特和领域:

@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。

1 个答案:

答案 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

上找到