java unmarshall LocalDateTime错误

这是我的适配器类:

public class LocalDateTimeAdapter extends XmlAdapter { @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部分:

 2000-01-01T19:45:00Z 

我正在关注这个例子。

可能你正在使用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); } 

您可能需要通知日期时间格式 ,因为默认格式为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’T’HH:毫米
  • UUUU-MM-dd’T’HH:MM:SS
  • UUUU-MM-dd’T’HH:MM:SS.SSS
  • UUUU-MM-dd’T’HH:MM:SS.SSSSSS
  • UUUU-MM-dd’T’HH:MM:ss.SSSSSSSSS