0

我需要采用类似于以下内容的 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 的构造函数,并且会收到“没有从字符串值反序列化的字符串参数构造函数/工厂方法”错误,经过一些研究,我添加了构造函数来解决这个问题。有了这个我克服了那个错误,但是映射后返回的设备对象列表的所有字段都设置为空。尝试映射这些 XML 属性时,我在这里遗漏了什么/做错了什么?

4

1 回答 1

0

(代表 OP 发布)

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

于 2017-02-23T20:31:40.990 回答