首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用UnrecognizedPropertyException时使用XmlMapper

使用UnrecognizedPropertyException时使用XmlMapper
EN

Stack Overflow用户
提问于 2020-12-18 07:21:08
回答 2查看 203关注 0票数 0

XML字符串

一个profilesBatch包含一个profilesList

profilesList包含一个或多个配置文件。

配置文件包含1 useRestrictions

代码语言:javascript
复制
<profilesBatch version="1.0" id="745" date="2012-12-13" transportKeyLabel="str1234">
  <profilesList>
    <profile iccid="str1234" profileType="str1234">
      <useRestrictions>
        <maximumDownloadAttempts>745</maximumDownloadAttempts>
        <maximumConfirmationAttempts>745</maximumConfirmationAttempts>
        <maximumNumberEIDs>745</maximumNumberEIDs>
        <maximumDownloadsPerEID>745</maximumDownloadsPerEID>
        <allowDownloadForDownloaded>true</allowDownloadForDownloaded>
        <allowDownloadForInstalled>true</allowDownloadForInstalled>
        <allowDownloadForError>true</allowDownloadForError>
      </useRestrictions>
    </profile>
  </profilesList>
</profilesBatch>

类ProfilesBatch

代码语言:javascript
复制
@Getter
@Setter
@XmlRootElement(name = "ProfilesBatch")
public class ProfilesBatch
{
    @JacksonXmlProperty(isAttribute = true)
    private String date;

    @JacksonXmlElementWrapper(localName="profilesList")
    @JacksonXmlProperty(localName="profilesList")
    private ProfilesList profilesList;

    @JacksonXmlProperty(isAttribute = true)
    private String transportKeyLabel;

    @JacksonXmlProperty(isAttribute = true)
    private Header header;

    @JacksonXmlProperty(isAttribute = true)
    private String id;

    @JacksonXmlProperty(isAttribute = true)
    private String version;

}

类ProfileList

代码语言:javascript
复制
@Getter
@Setter
@XmlRootElement(name = "ProfilesList")
public class ProfilesList
{
    @JacksonXmlElementWrapper(localName="profile")
    @JacksonXmlProperty(localName="profile")
    private List<Profile> profile;
}

类配置文件

代码语言:javascript
复制
@Getter
@Setter
@XmlRootElement(name = "Profile")
public class Profile
{
    @JacksonXmlProperty(isAttribute = true)
    private String iccid;

    @JacksonXmlProperty(isAttribute = true)
    private String profileType;

    @JacksonXmlElementWrapper(localName="useRestrictions")
    private UseRestrictions useRestrictions;

}

类UseRestrictions

代码语言:javascript
复制
@Getter
@Setter
@XmlRootElement(name = "useRestrictions")
public class UseRestrictions {

    @JacksonXmlProperty(localName = "maximumDownloadAttempts")
    private int maximumDownloadAttempts;

    @JacksonXmlProperty(localName = "maximumNumberEIDs")
    private int maximumNumberEIDs;

    @JacksonXmlProperty(localName = "maximumConfirmationAttempts")
    private int maximumConfirmationAttempts;

    @JacksonXmlProperty(localName = "maximumDownloadsPerEID")
    private int maximumDownloadsPerEID;

    @JacksonXmlProperty(localName = "allowDownloadForInstalled")
    private boolean allowDownloadForInstalled;

    @JacksonXmlProperty(localName = "allowDownloadForDownloaded")
    private boolean allowDownloadForDownloaded;

    @JacksonXmlProperty(localName = "allowDownloadForError")
    private boolean allowDownloadForError;

}

我正在使用spring和jackson-dataformat-xml。做的时候

代码语言:javascript
复制
XmlMapper xmlMapper = new XmlMapper();
ProfilesBatch profilesBatch = xmlMapper.readValue(data, ProfilesBatch.class);

其中数据是xml字符串。

越来越多

代码语言:javascript
复制
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:Unrecognized field "maximumDownloadAttempts" (class sm.movasim.sftp.service.espgmodel.Profile), not marked as ignorable

这些类和注释有什么问题吗?注意,所有类都有setter和getter。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-18 08:02:12

修改ProfilesList

代码语言:javascript
复制
    @Getter
    @Setter
    @XmlRootElement(name = "ProfilesList")
    public static class ProfilesList {
        @JacksonXmlElementWrapper(localName = "profile", useWrapping = false)
        @JacksonXmlProperty(localName = "profile")
        private List<Profile> profile;
    }

原因:默认@JacksonXmlElementWrapper需要一个包装标签=> --您的<profile>列表需要包装在另一个<profile></profile>级别,设置useWrapping = false以避免它。

票数 3
EN

Stack Overflow用户

发布于 2020-12-18 08:09:04

您实际上不需要ProfileList类。

让ProfileBatch类中的列表直接带有以下注释:

代码语言:javascript
复制
@XmlRootElement(name = "ProfilesBatch")
public class ProfilesBatch
{
    @JacksonXmlElementWrapper(localName="profilesList")
    @JacksonXmlProperty(localName="profile")
    private List<Profile> profilesList;

另外,在概要文件类UseRestrictions中,可以注释

代码语言:javascript
复制
@JacksonXmlProperty(localName="useRestrictions")
private UseRestrictions useRestrictions;

您不需要对象的包装注释。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65353132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档