Java \ JSON:UnrecognizedPropertyException:无法识别的字段“ CefMessagesGenerators”错误

时间:2019-06-26 11:04:33

标签: java json

我有以下Json和相应的Java类。

能否请您检查一下并告知我为什么会出现此异常?

是因为我添加了另一个

谢谢!


public class CefMessagesGenerator {

    private String ip;
    private String username;
    private String password;

    //getters and setters    
}


public class CefMessagesGenerators {

    private List<CefMessagesGenerator> cefMessagesGeneratorList = null;

    public CefMessagesGenerators() {
    }

    public CefMessagesGenerators(List<CefMessagesGenerator> cefMessagesGeneratorList) {
        super();
        this.cefMessagesGeneratorList = cefMessagesGeneratorList;
    }

    public List<CefMessagesGenerator> getCefMessagesGeneratorList() {
        return cefMessagesGeneratorList;
    }

    public void setCefMessagesGeneratorList(List<CefMessagesGenerator> cefMessagesGeneratorList) {
        this.cefMessagesGeneratorList = cefMessagesGeneratorList;
    }
}

public class ControllerLab {

    private KubernetesCluster kubernetesCluster;
    private AzureEnvironment azureEnvironment;
    private PortalEnv portalEnv;
    private List<CefMessagesGenerator> cefMessagesGenerators = null;

    //getters and setters

    public List<CefMessagesGenerator> getCefMessagesGenerators() {
        return cefMessagesGenerators;
    }

    public void setCefMessagesGenerators(List<CefMessagesGenerator> cefMessagesGenerators) {
        this.cefMessagesGenerators = cefMessagesGenerators;
    }
}

,(部分)json是:

enter image description here

(不幸的是,我不得不在此处添加json图像作为文本,因为系统声称“我具有以下Json和相应的Java类。” ...)

1 个答案:

答案 0 :(得分:0)

正如注释中已经描述的那样,主要问题是您的json包含属性名称CefMessagesGenerators,而类ControllerLab包含属性cefMessagesGenerators(请注意第一个的大小写不同)信件)。因此,解析器找不到属性“ CefMessagesGenerators”。

要解决此问题,将有几个选项,具体取决于您使用的解析器:

  • 将json属性重命名为“ cefMessagesGenerators”(首选选项)
  • 在您的Pojo中定义一个非标准的属性名称(例如,通过杰克逊的@JsonProperty之类的注释)
  • 定义自定义命名策略,以允许解析器将CefMessagesGenerators映射到cefMessagesGenerators

请注意,出于多种原因,第一个选项将是首选。更重要的原因之一是,这样做不会违反principle of least astonishment(人们希望属性名称完全匹配)。

最后,引用您的评论:

  

我将json标签更改为以小写字母开头,而将类名保留为以大写字母开头,并且它起作用了(不明白为什么...)

请注意,类CefMessagesGenerators在这里不相关,因为ControllerLab不使用它。因此,类名根本没有关系。