我正在尝试使用自定义反序列化器在春季启动测试中解析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。如何通过注入
ObjectMapper
或XmlMapper
解析xml?在
pom.xml
中,我添加了jackson-core
和jackson-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/