我正在尝试使用自定义反序列化器在 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-core
和jackson-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/