首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有相同@XmlElement但不同@XmlElementWrapper的XmlMapper

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

Stack Overflow用户
提问于 2020-03-13 14:49:59
回答 1查看 642关注 0票数 1

我有一个类,它有一些字符串列表,我想通过杰克逊进行编组。为了更好地使用,我希望在每个元素列表中都有相同的元素名称。所以我这样注解:

代码语言:javascript
复制
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“的多个字段。我也尝试过,但没有效果:

代码语言:javascript
复制
// mapper instanceof com.fasterxml.jackson.dataformat.xml.XmlMapper
mapper.configure(MapperFeature.USE_WRAPPER_NAME_AS_PROPERTY_NAME, true);

我还需要什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-06 08:57:01

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

代码语言:javascript
复制
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 );
    }
}

..。所以我的课看起来是:

代码语言:javascript
复制
public class MyClass
{
    public String title;

    public StringList hints;

    public StringList warnings;

    public StringList errors;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60672582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档