首页 > 解决方案 > xmlMapper 允许在反序列化期间使用任何根元素

问题描述

我有这样的代码

public class Xml {

    public static void main(String[] args) throws JsonProcessingException {

        String xmlString = "<password><plainPassword>12345</plainPassword></password>";

        XmlMapper xmlMapper = new XmlMapper();
        PlainPassword plainPassword = xmlMapper.readValue(xmlString, PlainPassword.class);
        System.out.println(plainPassword.getPlainPassword());
    }

    @JacksonXmlRootElement(localName = "password")
    public static class PlainPassword {

        public String getPlainPassword() {
            return this.plainPassword;
        }

        public void setPlainPassword(String plainPassword) {
            this.plainPassword = plainPassword;
        }

        private String plainPassword;
    }
}

它工作正常,但xmlString我可以使用任何根标签名称,我的代码仍然可以工作。例如String xmlString = "<x><plainPassword>12345</plainPassword></x>";,我x用作根元素的地方也可以。但是是否可以说 xmlMapper 它只能正确反序列化具有“密码”根元素的字符串?

标签: javaxmlxmlmapper

解决方案


您可以将根类的名称更改为所有内容,例如:@JacksonXmlRootElement(localName = "xyz")并且它可以工作。

基于Java 文档 JacksonXmlRootElement用于定义在序列化时用于根级对象的根元素的名称(不用于反序列化映射),通常使用类型(类)的名称。


推荐阅读