【发布时间】:2018-02-01 13:41:05
【问题描述】:
我目前有这个:
@JacksonXmlRootElement(namespace = "some-ns", localName = "queryResult")
public class QueryResult {
...
}
现在我需要通过配置文件使"some-ns" 可配置(即在运行时设置)。
实现这一目标的最佳方法是什么?
【问题讨论】:
标签: xml jackson xml-namespaces
我目前有这个:
@JacksonXmlRootElement(namespace = "some-ns", localName = "queryResult")
public class QueryResult {
...
}
现在我需要通过配置文件使"some-ns" 可配置(即在运行时设置)。
实现这一目标的最佳方法是什么?
【问题讨论】:
标签: xml jackson xml-namespaces
你可以写一个自定义的AnnotationIntrospector:
import com.fasterxml.jackson.databind.PropertyName;
import com.fasterxml.jackson.databind.introspect.AnnotatedClass;
import com.fasterxml.jackson.dataformat.xml.JacksonXmlAnnotationIntrospector;
public class MyJacksonXmlAnnotationIntrospector extends JacksonXmlAnnotationIntrospector
{
private static final long serialVersionUID = 1L;
@Override
public PropertyName findRootName(AnnotatedClass ac) {
PropertyName pn = super.findRootName(ac);
return pn.withNamespace("custom");
}
}
然后将其传递给杰克逊映射器:
XmlMapper xmlMapper = new XmlMapper();
xmlMapper.setAnnotationIntrospector(new MyJacksonXmlAnnotationIntrospector());
xmlMapper.writeValue(System.out, new QueryResult());
【讨论】: