java - ObjectMapper 正在尝试将字符串解析为 json 而不是 xml

标签 java xml spring-boot jackson jackson-dataformat-xml

我正在尝试使用自定义反序列化器在 Spring Boot 测试中解析 XML。

@SpringBootTest
public class MyTest {

    @Autowired
    ObjectMapper mapper;

    @Test
    public void shouldParseXmlString() {
        final String input = "<abc>value</abc>"  // Some XML string which is valid xml
        MyClass myClass = mapper.readValue(input, MyClass.class);
        assertEquals("value", myClass.getAbc());
    }
}

我有一个自定义解串器,它扩展了 JsonDeserializer<MyClass>并将 xml 反序列化为 MyClass 。当我使用XmlMapper时直接注入(inject)它效果很好,但是当我尝试注入(inject) ObjectMapper 时在测试中它失败并出现以下错误。

com.fasterxml.jackson.core.JsonParseException: Unexpected character ('<' (code 60)) expected a valid value (JSON String, Number, Array, Object or token 'null', 'true' or 'false')

正如错误所示,它正在尝试将输入字符串解析为 json 而不是 xml。如何通过注入(inject) ObjectMapper 来解析 xml或XmlMapper

pom.xml我已添加jackson-corejackson-dataformat-xml作为版本 2.10.0 的依赖项

最佳答案

Autowiring ObjectMapper只会按类型 Autowiring ObjectMapper bean。您所期望的是将 XmlMapper 注入(inject)到 ObjectMapper 类型的变量中。假设您有一个 XmlMapper bean 定义如下

@Bean
public XmlMapper xmlMapper(){
    return new XmlMapper();
}

您可以按名称将其注入(inject)到ObjectMapper变量

@Qualifier("xmlMapper")
@Autowired
private ObjectMapper mapper;

关于java - ObjectMapper 正在尝试将字符串解析为 json 而不是 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62281463/

相关文章:

java - 检查 j2me 中的互联网是否正常工作

spring-boot - 如何解决 Spring Boot 3 和 Hibernate Search 的依赖冲突

java - Spring 3.2 + Hibernate 4 OpenSessionInViewFilter

Java : how to communicate from localhost Java desktop application to Java Applet?

以 XML 描述的 Java GUI

使用矢量 xml 作为可绘制 API 16 时的 Android ResourceNotFound

java - 是否有更好的方法来减少长时间运行的 quartz 作业的执行时间?

java - 在具有不同 Controller 的多个端口上运行 Spring Boot 应用程序

java - 我如何能够在类中引用实例的私有(private)字段?

android - 修复 styles.xml 中的错误以生成 R.java : No resource found name 'Theme.AppCompat.Light'