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;
}
我有一个 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;
}