将LocalDateTime与JAXB一起使用

hfh*_*hc2 6 java time jaxb

我试图使用JAXB与该LocalDateTime类型的字段.我写了一个适配器来处理转换:

public class LocalDateTimeXmlAdapter extends XmlAdapter<String, LocalDateTime> {
    @Override
    public String marshal(LocalDateTime arg0) throws Exception {
        return arg0.toString();
    }

    @Override
    public LocalDateTime unmarshal(String arg) throws Exception {
        return LocalDateTime.parse(arg);
    }
}
Run Code Online (Sandbox Code Playgroud)

我这样注册了适配器package-info.java:

@XmlJavaTypeAdapters({
        @XmlJavaTypeAdapter(type=LocalDateTime.class, value=LocalDateTimeXmlAdapter.class)
})
package xml;

import java.time.LocalDateTime;

import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
Run Code Online (Sandbox Code Playgroud)

根据这个页面,这似乎已经足够了.但是,我不断收到以下错误:

com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
java.time.LocalDateTime does not have a no-arg default constructor.
Run Code Online (Sandbox Code Playgroud)

我理解抛出异常的原因,但我几乎无法添加默认构造函数java.time.LocalDateTime.这似乎是班级/一个奇怪的设计决定的缺点.有没有解决方法?

bdo*_*han 2

你所拥有的应该有效。以下其中一项可能是错误的:

  1. 由于您已@XmlJavaTypeAdapter在包级别指定了 ,因此它仅适用于包中名为 的类的属性xml。您的模型中是否有来自不同包的类具有 type 的映射属性LocalDateTime
  2. 您的文件也可能package-info.java没有被编译。