在Jackson中动态设置XML名称空间

在Jackson中动态设置XML名称空间,xml,jackson,xml-namespaces,Xml,Jackson,Xml Namespaces,我目前有: @JacksonXmlRootElement(namespace = "some-ns", localName = "queryResult") public class QueryResult { ... } 现在我需要通过一个配置文件(即在运行时设置)来配置“一些ns” 实现这一点的最佳方法是什么?您可以编写一个自定义的注释Introspector: import com.fasterxml.jackson.databind.PropertyName; import c

我目前有:

@JacksonXmlRootElement(namespace = "some-ns", localName = "queryResult")
public class QueryResult {
    ...
}
现在我需要通过一个配置文件(即在运行时设置)来配置
“一些ns”


实现这一点的最佳方法是什么?

您可以编写一个自定义的
注释Introspector

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"); 
    }
}
然后将其传递给jackson mapper:

    XmlMapper xmlMapper = new XmlMapper();
    xmlMapper.setAnnotationIntrospector(new MyJacksonXmlAnnotationIntrospector());
    xmlMapper.writeValue(System.out, new QueryResult());