`@JsonRootName` 与 POJONode 一起使用时被忽略

在处理遗留代码时,我创建了一个扩展 com.fasterxml.jackson.databind.node.POJONode 的包装类(我无法避免这一点)。

尽管我用 @JsonRootName 注释了包装类,但它始终使用原始类名进行序列化。看起来注释完全被忽略了。如果我使用 @JsonTypeName@JsonTypeInfo(我在一些示例中发现),也会发生同样的情况。

我编写了以下简单的 JUnit 测试,证明了这个问题:

import static java.lang.String.format;
import static org.junit.Assert.assertNotNull;

import java.io.IOException;

import org.junit.Test;

import com.fasterxml.jackson.annotation.JsonRootName;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.node.POJONode;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;

public class POJONodeJsonRootNameTest {

    static final String XML_PRE_PTRN = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>%s";

    private final ObjectMapper mapper = new ObjectMapper();
    private final XmlMapper xmlMapper = new XmlMapper();

    @Test
    public void shouldConvertObjectFromXmlToJson() throws IOException {

        String xml = format(XML_PRE_PTRN,"<test><name>test</name><description>test</description></test>");

        JsonNode node = xmlMapper.readTree(xml);

        mapper.configure(SerializationFeature.WRAP_ROOT_VALUE,true);

        String json = mapper.writeValueAsString(new TestWrapper(node));

        System.out.println(json);

        assertNotNull(json);
    }

    @JsonRootName(value = "test")
    private class TestWrapper extends POJONode {

        public TestWrapper(Object v) {
            super(v);
        }
    }
}

实际结果

{"TestWrapper":{"name":"test","description":"test"}}

预期结果

{"test":{"name":"test","description":"test"}}

在pom文件中,我添加了jackson-databindjackson-dataformat-xmljackson-module-jaxb-annotations的依赖,所有版本都是2.12.4(目前是最新的)。

如果我做错了什么,请提出修复建议,或者可能的替代方案。再次强调,由于遗留代码,我有必要扩展 POJONode 类。

对此问题的任何帮助将不胜感激。

非常感谢您的时间和帮助。

rxf_sy 回答:`@JsonRootName` 与 POJONode 一起使用时被忽略

正如问题的评论中所说, Marco Tizzano 的代码在 jackson 2.10.5 版本之前都可以正常工作。这表明在此版本之后,回归问题已被包含并再次出现在 2021 年 7 月发布的最新 jackson 2.12.4 版本中。 Marco Tizzano 在 FasterXml 问题跟踪器上向开发人员报告了该问题:与问题的完整描述是 here

本文链接:https://www.f2er.com/2337.html

大家都在问