有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java\JSON:无法识别的属性异常:无法识别的字段“CefMessagesGenerators”错误

我有以下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) 个答案

  1. # 1 楼答案

    如注释中所述,主要问题是json包含属性名CefMessagesGenerators,而类ControllerLab包含属性cefMessagesGenerators(注意第一个字母的大小写差异)。因此,解析器无法找到属性“CefMessagesGenerators”

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

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

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

    最后,引用你的评论:

    I changed the json label to start with small letter and left the class name to begin with a capital letter and it worked (don't understand why...)

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