Я пытаюсь разобрать XML в класс Java, а затем отправить его во внешний интерфейс. Я использую Springboot 2.2.5, формат данных Джексона xml 2.10.2
У меня есть следующий файл XML:
<root xmlsn="...">
<result status="1" outs="6" val="0" pic="7"/>
</root>
Я ожидаю этого ответа от бэкэнда на внешнем интерфейсе:
{
status: 1,
outs: 6,
val: 0
pic: 7
}
Ну, это очень просто.
Посмотрим, что у меня есть:
Класс для корневого элемента:
@JacksonXmlRootElement(namespace = "...", localName = "root")
public class SetXmlResponseDto {
@JacksonXmlProperty(localName = "result")
private ResultPropertyDto result;
}
А затем класс для элемента результата ResultPropertyDto:
public class ResultPropertyDto {
@JacksonXmlProperty(localName = "val", isAttribute = true)
private String value;
@JacksonXmlProperty(localName = "status", isAttribute = true)
private String status;
}
// Я удалил некоторые части кода для brewity (сеттер, геттер)
Но результат этого следующий:
{
result: {
status: 1,
....
}
}
Вероятно, неплохо также упомянуть, как я его строю?
ObjectMapper objectMapper = new XmlMapper();
objectMapper().readValue(new URL(urlAddress), SetXmlResponseDto.class);
Конечно, я мог бы просто вызвать SetXmlResponseDto.getStatus()
перед отправкой во внешний интерфейс, и вывод будет точно таким, как ожидалось, но мне было интересно, есть ли способ добиться требуемого результата без создания подкласса ResultPropertyDto
??
Представьте, что у вас есть 4 вложенных элемента в XML, и вы хотите отобразить только 1 атрибут этого вложенного элемента. Я должен был бы создать 4 класса для этого??
Спасибо за ответы