使用LocalDateTime与JAXB

7

我正在尝试使用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);
    }
}

我在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;

根据这个页面,似乎这已经足够了。然而,我一直收到以下错误:

com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
java.time.LocalDateTime does not have a no-arg default constructor.

我理解抛出异常的原因,但是我几乎无法为java.time.LocalDateTime添加默认构造函数。这似乎是该类的缺陷/奇怪的设计决策。是否有任何解决方法?

2个回答

2
你所拥有的应该是有效的。以下可能有一些问题:
  1. 由于你在包级别指定了 @XmlJavaTypeAdapter,因此它只适用于你包中名为 xml 的类的属性。是否存在来自不同包的模型类,其具有映射到 LocalDateTime 类型的属性?
  2. 还有可能是你的 package-info.java 文件没有被编译。

1

出现了同样的问题:IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions

我的问题是:我有几个包(三个),需要package-info.java文件,如以下图片所示。

我通过在这三个目录中添加package-info.java来“解决”这个问题。例如,对于包fr.gouv.agriculture.dal.ct.planCharge.metier.dao.charge.xml

@XmlJavaTypeAdapter(type = LocalDate.class, value = LocalDateXmlAdapter.class)
package fr.gouv.agriculture.dal.ct.planCharge.metier.dao.charge.xml;

如果有比将内容复制/粘贴到多个package-info.java文件中更好的想法,请提前致谢。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接