繁体   English   中英

无法将XML映射到Jackson中的POJO列表

[英]Trouble mapping XML to a list of POJOs in Jackson

我需要采用类似于以下内容的XML:

<root:ElementName>
    <equipment:Equipment>
        <eqp:Name>Equipment 1</eqp:Name>
        <eqp:Type>A</eqp:Type>
    </equipment:Equipment>
    <equipment:Equipment>
        <eqp:Name>Equipment 2</eqp:Name>
        <eqp:Type>B</eqp:Type>
    </equipment:Equipment><equipment:Equipment>
        <eqp:Name>Equipment 3</eqp:Name>
        <eqp:Type>C</eqp:Type>
    </equipment:Equipment>
</root:ElementName>

我想将其映射到“设备” POJO列表中。 我使用的是Jackson XML映射和Lombok,因此基本上我现在将其分为两个类,首先是应该在该<root:ElementName>读取的根对象,然后将所有<equipment:Equipment>标记转换为一个设备对象清单:

@JacksonXmlRootElement(localName = "root:ElementName")
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class EquipmentMidbCompositeResponse
{

    @JsonProperty("equipment")
    @JacksonXmlProperty(localName = "equipment:Equipment")
    @Getter
    @Setter
    List<Equipment> equipmentList;

}

然后设备对象本身:

@Entity
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public final class Equipment
{
    @JsonCreator
    public  Equipment(String name){
    }

    @JsonProperty("EquipmentName")
    @JacksonXmlProperty(localName = "eqp:Name")
    @Setter
    @Getter
    private String name;

    @JsonProperty("EquipmentType")
    @JacksonXmlProperty(localName = "eqp:Type")
    @Setter
    @Getter
    private String type;
}

起初,我在Equipment对象中没有带有@JsonCreator的构造函数,并且会收到“没有从字符串值反序列化的无字符串参数的构造函数/工厂方法”错误,并且经过一些研究后添加了该构造函数来解决该问题。 这样我就克服了这个错误,但是映射后返回的Equipment对象列表将其所有字段都设置为null。 尝试映射这些XML属性时,我在这里缺少什么/做错了什么?

(代表OP张贴)

我发现了问题,我使用@JsonCreator的方法是解决该错误的错误方法。 事实证明,我要做的就是在列表项中添加一个@JacksonXmlElementWrapper(useWrapping = false)批注,一切顺利。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM