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

标签 java jackson-dataformat-xml

我有一个类,其中有一些我想通过 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:表示属性“文本”的多个字段。我也试过了,没有效果:

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

我还需要什么?

最佳答案

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

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;
}

关于java - 具有相同 @XmlElement 但不同 @XmlElementWrapper 的 XmlMapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60672582/

相关文章:

java - jackson XML 2.9.0 : @JacksonXmlElementWrapper not working with @JsonCreator & @JsonProperty constructor

java - 强制 JacksonXml 将原始值序列化为字符串

java - 使用哪种方法来对该组件进行单元测试?善于交际还是独来独往?

java - 我正在制作一个调用电话的应用程序,如何保存多个号码,然后让用户选择其中一个?

java - RandomMove 方法 Tic Tac Toe 不起作用

xml - 强制 JacksonXML 将原始 XML 反序列化为字符串

java - SpringBoot Webflux 无法返回 application/xml

java - 如何反序列化 XML 并在给定元素后获取特定键的值

java - JSR-286 portlet 是否需要在其 WAR 文件中包含 web.xml 文件?

java - 如何将日期格式更改为其他格式?