java unmarshal LocalDateTime错误

时间:2015-04-03 00:20:13

标签: java xml datetime jaxb unmarshalling

这是我的适配器类:

public class LocalDateTimeAdapter extends XmlAdapter<String, LocalDateTime> {

@Override
public LocalDateTime unmarshal(String v) throws Exception {
    return new LocalDateTime(v);
}

@Override
public String marshal(LocalDateTime v) throws Exception {
    return v.toString();
}

}

这是一个对象类,我想存储日期:

@XmlAccessorType(XmlAccessType.FIELD)
public class Object {

@XmlJavaTypeAdapter(LocalDateTimeAdapter.class)
private LocalDateTime time;

public LocalDateTime getTime() {
        return time;
    }

由于某种原因,我无法编译它。它表明问题出在return new LocalDateTime(v);。这就是我得到的错误:

    Error:(9, 16) java: constructor LocalDateTime in class java.time.LocalDateTime cannot be applied to given types;
  required: java.time.LocalDate,java.time.LocalTime
  found: java.lang.String
  reason: actual and formal argument lists differ in length

和xml部分:

<time type="dateTime">2000-01-01T19:45:00Z</time>

我正在关注this示例。

1 个答案:

答案 0 :(得分:4)

您可能正在使用Java 8中的LocalDateTime。此类没有任何字符串构造函数。

您跟踪LocalDateTime的示例来自JodaTime

所以,你可以这样做:

  • 导入org.joda.time.LocalDateTime(您需要JodaTime依赖项)而不是java.time.LocalDateTime;

  • 或将unmarshal方法更改为以下内容:

    @Override
    public LocalDateTime unmarshal(String v) throws Exception {
        return LocalDateTime.parse(v);
    }
    

您可能需要通知date time format,因为默认格式为2011-12-03T10:15:30,可能是:

@Override
public LocalDateTime unmarshal(String v) throws Exception {
    return LocalDateTime.parse(v, DateTimeFormatter.ISO_INSTANT);
}

此外,在java.time.LocalDateTime toString中将输出以下ISO-8601格式之一:

  • UUUU-MM-DD&#39; T&#39; HH:MM
  • UUUU-MM-DD&#39; T&#39; HH:MM:SS
  • UUUU-MM-DD&#39; T&#39; HH:MM:SS.SSS
  • UUUU-MM-DD&#39; T&#39; HH:MM:SS.SSSSSS
  • UUUU-MM-DD&#39; T&#39; HH:MM:ss.SSSSSSSSS