XmlMapper 具有相同的@XmlElement 但不同的@XmlElementWrapper

XmlMapper with same @XmlElement but different @XmlElementWrapper

我有一个 class,其中有一些我想通过 Jackson 整理的字符串列表。为了更好地使用,我想在每个列表中列出相同的元素名称。所以我这样注释:

import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;

public class MyClass
{
    public String title;

    @XmlElementWrapper(name="hints")
    @XmlElement(name="text")
    public List<String> hints;

    @XmlElementWrapper(name="warnings")
    @XmlElement(name="text")
    public List<String> warnings;

    @XmlElementWrapper(name="errors")
    @XmlElement(name="text")
    public List<String> errors;
}

但在运行时出现异常无法写入JSON:多个字段表示属性 "text"。我也试过这个没有效果:

// mapper instanceof com.fasterxml.jackson.dataformat.xml.XmlMapper
mapper.configure(MapperFeature.USE_WRAPPER_NAME_AS_PROPERTY_NAME, true);

我还需要什么?

不是一个完美的解决方案,但当我将列表本身分隔成一个新的 class 并删除包装(因为它由使用这种新类型的成员包装)时,仍然是一个很好的解决方法:

public class StringList
{
    @JacksonXmlElementWrapper(useWrapping = false)
    @XmlElement(name="text")
    public final List<String> list = new ArrayList<String>();

    public void add( String msg )
    {
        list.add( msg );
    }
}

...所以我的 class 看起来像:

public class MyClass
{
    public String title;

    public StringList hints;

    public StringList warnings;

    public StringList errors;
}