【问题标题】:Java\JSON: UnrecognizedPropertyException: Unrecognized field "CefMessagesGenerators" errorJava\JSON: UnrecognizedPropertyException: Unrecognized field "CefMessagesGenerators" 错误
【发布时间】:2019-06-26 11:04:33
【问题描述】:

我有以下 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是:

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

【问题讨论】:

  • 你自己在解析json吗?有代码吗?
  • 请注意,您的属性名为 cefMessagesGenerators,而您的 Json 似乎有 CefMessagesGenerators(以大写 C 开头)。
  • 除此之外,CefMessagesGenerators 类似乎是多余的。
  • @Thomas 你是对的。但是反了!!!我将 json 标签更改为以小写字母开头,并将类名以大写字母开头,并且它起作用了(不明白为什么......)。如果你愿意 - 你可以回答这个问题,我会接受它!
  • @JonSkeet 为什么是乔恩?因为那里只有一项?未来还会有更多...

标签: java json


【解决方案1】:

正如 cmets 中已经描述的,主要问题是您的 json 包含属性名称 CefMessagesGenerators,但类 ControllerLab 包含属性 cefMessagesGenerators(请注意第一个字母的大小写差异)。因此解析器找不到属性“CefMessagesGenerators”。

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

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

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

最后,引用您的评论:

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

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

【讨论】:

    猜你喜欢
    • 2022-01-13
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多