如何解决jackson xmlmapper 动态属性名称
我想生成以下xml:
<word start="1556" end="1564" TestArticle="36" Chemical="7">Ammonium</word>
<word start="1566" end="1584" Endpoint="36" Chemical="7" >per-fluorobutyrate</word>
<word start="1585" end="1586" TestArticle="37" >(</word>
我正在使用以下 pojo,它负责处理开始和结束,因为它们是固定的属性名称,但我有“testArticle”、“Endpoint”、“Chemcial”等,它们本质上是动态的,并且具有价值,我不知道如何处理。
public class WordPOJO {
@JacksonXmlProperty(isAttribute = true)
String start;
@JacksonXmlProperty(isAttribute = true)
String end;
@JacksonXmlText
String str;
// not sure if this is the way to do it,but it not outputing in desired format
@XmlAnyElement(lax = true)
List<String> entityList;
public String getStart() {
return start;
}
public void setStart(String span) {
this.start = span;
}
public String getEnd() {
return end;
}
public void setEnd(String span) {
this.end = span;
}
public List<String> getEntityList()
{
return entityList;
}
public void setEntityList(List<String> entityList)
{
this.entityList = entityList;
}
//@JacksonXmlElementWrapper(useWrapping = false)
//@JacksonXmlProperty(localName = "word")
public String getstr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
}
解决方法
如果您预先知道 XML 属性名称 TestArticle
、Chemical
和 Endpoint
,
那么您可以在您的 WordPOJO
Java 类中将这些表示为附加属性:
@JacksonXmlProperty(isAttribute = true,localName = "TestArticle")
String testArticle;
@JacksonXmlProperty(isAttribute = true,localName = "Chemical")
String chemical;
@JacksonXmlProperty(isAttribute = true,localName = "Endpoint")
String endpoint;
// Getters and setters (omitted here for brevity)
请注意,您还需要明确指定 XML 名称
由 localName = "..."
) 匹配您的 XML 内容。
(另见javadoc of @JacksonXmlProperty
。)
如果你不这样做,那么杰克逊会含蓄地
选取从您的 Java 属性名称派生的 XML 名称
(testArticle
,chemical
,endpoint
) 不匹配
您的实际 XML 内容。
如果 XML 属性确实是动态的,而您事先不知道它们,
那么您将需要使用 @JsonAnyGetter
和 @JsonAnySetter
。
请参阅 javadoc of @JsonAnyGetter 和 JsonAnySetter。
不要被注释名称中的 Json
激怒。 Jackson 可以处理 JSON 和 XML 以及更多格式。对于 JSON,您使用 ObjectMapper
。
对于 XML,您使用 XmlMapper
。
Map<String,Object> otherProperties = new HashMap<>();
@JsonAnySetter
public void setOtherProperty(String name,String value) {
otherProperties.put(name,value);
}
@JsonAnyGetter
public Map<String,Object> getOtherProperties() {
return otherProperties;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。