У меня есть Spring Boot @RestController
, у которого есть конечный загрузчик, который получает объект в качестве входных данных.
public ResponseEntity<Void> upload(String productId, Boolean dryrun, ProductConfig product)
Эта конечная точка получает XML-файл с ProductConfig
.У меня есть несколько аннотаций Джексона для переименования элементов xml и конфигурации для использования развернутых списков по умолчанию на Jackson2ObjectMapperBuilder
, и это прекрасно работает.
Так что моя проблема в том, что теперь мне нужно это ObjectMapper
в одном из моих тестовпроанализировать один из этих XML-файлов из ресурсов.Я пробовал две разные вещи:
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class TestIntegrationTest {
@Autowired ObjectMapper mapper;
@Test
public void test() throws Exception{
Resource res = new ClassPathResource("SimpleConfig.xml");
ProductConfig conf = mapper.readValue(res.getFile(), ProductConfig.class);
}
}
и
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class TestIntegrationTest {
@Test
public void test() throws Exception{
XmlMapper mapper = new XmlMapper();
mapper.setDefaultUseWrapper(false);
Resource res = new ClassPathResource("SimpleConfig.xml");
ProductConfig conf = mapper.readValue(res.getFile(), ProductConfig.class);
}
}
Первая - та, которую я ожидал бы сработать, но она вылетает с исключением при разборе символа '<'Кажется, что он хочет анализировать json, а не xml, но в <code>@RestController он анализируется идеально, ... или ObjectMapper просто не тот класс, который выполняет синтаксический анализ для @RestController
?
Во втором примере он не может выполнить синтаксический анализ некоторых вложенных классов, а именно ProductConfig
может иметь список Unit
s, который является развернутым списком <unit>
дочерних элементов.Соответствующая часть модели:
@JsonProperty("units")
@JacksonXmlProperty(localName = "unit")
@Valid
private List<Unit> units = null;
Это работает, когда я просто загружаю xml в конечную точку отдыха, но не работает, когда я вызываю XmlMapper
вручную.
xml выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<product name="foobar">
<unit target="config">
<property name="prop1" value="foo"/>
<unit target="sub1">
<property name="prop1" value="foo"/>
<property name="prop2" value="bar"/>
<property name="prop3" value="blah"/>
</unit>
<unit target="sub2">
....
</unit>
...
</unit>
</product>
Есть идеи, как воспроизвести синтаксический анализ, который @RestController
делает для тестов?