【问题标题】:Dynamically set XML namespace in Jackson在 Jackson 中动态设置 XML 命名空间
【发布时间】:2018-02-01 13:41:05
【问题描述】:

我目前有这个:

@JacksonXmlRootElement(namespace = "some-ns", localName = "queryResult")
public class QueryResult {
    ...
}

现在我需要通过配置文件使"some-ns" 可配置(即在运行时设置)。

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

【问题讨论】:

    标签: xml jackson xml-namespaces


    【解决方案1】:

    你可以写一个自定义的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());
    

    【讨论】:

      猜你喜欢
      • 2015-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多