【问题标题】:How to generate classes using jsonschema2pojo that include a class called "System"?如何使用 jsonschema2pojo 生成包含名为“System”的类的类?
【发布时间】:2019-09-02 02:09:54
【问题描述】:

我正在尝试使用jsonschema2pojo 从第三方 JSON 模式生成 Java 类,因此我需要使用类的名称。其中一类称为System。结果,对于除该类之外的所有类,toString() 方法中出现错误:

package com.example;

// within a class

@Override
public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append(Status.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('[');
    ...
}

问题在于对System.identityHashCode() 的调用,因为系统类被解析为同一包中的类,而不是java.lang.System 类。生成的System 类中的调用如下所示:

sb.append(System.class.getName()).append('@').append(Integer.toHexString(java.lang.System.identityHashCode(this))).append('[');

JSON 可以是任何 JSON,即即使 { "type": "object" } 用于 2 个类,一个称为 System 另一个称为 Foo 会导致错误。我正在使用 Java API 生成代码,如下所示:

String packageName = "com.example";
JCodeModel codeModel = new JCodeModel();
GenerationConfig config = new DefaultGenerationConfig() {
    @Override
    public boolean isGenerateBuilders() { // set config option by overriding method
        return true;
    }
};
SchemaMapper mapper = new SchemaMapper(new RuleFactory(config, new Jackson2Annotator(config), new SchemaStore()), new SchemaGenerator());

mapper.generate(codeModel, #NAME_OF_CLASS#, packageName, SOME_URL);
codeModel.build(outputDir);

如何生成代码,以便将完全限定的 java.lang.System 类用于所有类?

【问题讨论】:

  • 如果您可以更新有问题的示例 JSON,将会很有帮助。
  • 添加 - 所有 JSON 都会发生错误。

标签: java jsonschema


【解决方案1】:

实际上,这是 Intellij 的一个问题。生成的类是正确的,我只是将它们从生成的目录复制到源目录,Intellij 认为这会有所帮助并将类简化为副本的一部分。结果,这实际上破坏了生成的类。

【讨论】:

    猜你喜欢
    • 2017-02-05
    • 2018-08-17
    • 1970-01-01
    • 2022-12-08
    • 2019-12-07
    • 2011-01-13
    • 2016-01-13
    • 2016-09-20
    • 2019-10-02
    相关资源
    最近更新 更多