我正在尝试使用自定义反序列化器在春季启动测试中解析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进行注入时,效果很好,但是当我尝试在测试中注入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。如何通过注入ObjectMapperXmlMapper解析xml?

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

最佳答案

自动装配ObjectMapper只需按类型自动装配ObjectMapper bean。您期望将XmlMapper注入类型为ObjectMapper的变量。假设您定义了XmlMapper bean,例如

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


您可以按名称将其注入ObjectMapper变量

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

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

10-12 23:22