Джексон: десериализовать пользовательские атрибуты в XML в POJO

Я хотел бы десериализовать и сопоставить классу следующие значения по имени атрибута. Это часть моего файла XML.

                <custom-attributes>
                    <custom-attribute name="Name1" dt:dt="string">VALUE</custom-attribute>
                    <custom-attribute name="Name2" dt:dt="string"> 
                        <value>1111</value>
                        <value>1111</value>
                        <value>1111</value>
                    </custom-attribute>
                    <custom-attribute name="Name3" dt:dt="string">VALUE2</custom-attribute>
                    <custom-attribute dt:dt="boolean" name="Name3">VALUE3</custom-attribute> 
                    <custom-attribute dt:dt="boolean" name="Name4">VALUE4</custom-attribute>
                </custom-attributes>

И это часть моего класса pojo

@JsonIgnoreProperties(ignoreUnknown = true)
public class CustomAttributes {

     @JacksonXmlProperty(localName="name3", isAttribute = true)
     private String roleID;

     public String getRoleID() {
           return roleID;
      }

     public void setRoleID(String roleID) {
          this.roleID = roleID;
}

}

Знаете ли вы, как правильно читать значения из этих атрибутов по имени? В настоящее время я получаю ноль

Всего 1 ответ


Я не уверен, как должен выглядеть результат, но если вы хотите разобрать весь xml в соответствующие объекты, они бы выглядели так:

public class CustomAttributeList {

    @JacksonXmlProperty(localName = "custom-attributes")
    private List<CustomAttributes> list;

    ...
}
@JacksonXmlRootElement(localName = "custom-attribute")
public class CustomAttributes {

    // the name attribute
    @JacksonXmlProperty
    private String name;

    // the datatype from the dt:dt field
    @JacksonXmlProperty(namespace = "dt")
    private String dt;

    // the content between the tags (if available)
    @JacksonXmlText
    private String content;

    // the values in the content (if available)
    @JacksonXmlProperty(localName = "value")
    @JacksonXmlElementWrapper(useWrapping = false)
    private List<String> values;

    ...
}

Обратите внимание, что localName="name3" вашем вопросе вообще не ссылается на свойство.