【问题标题】:Using the jsonschema2pojo's generated Class instantly to create objects in the code立即使用 jsonschema2pojo 生成的类在代码中创建对象
【发布时间】:2019-10-02 04:50:11
【问题描述】:

我想从各种接收 API json 回复中自动生成类。然后,在代码中使用这些已经生成的类生成对象。

我正在使用 jsonschema2pojo 库。使用我尝试的示例代码,该库将类生成为文件。

JCodeModel codeModel = new JCodeModel();

    GenerationConfig config = new DefaultGenerationConfig() {

        @Override
        public SourceType getSourceType() {
            return SourceType.JSON;
        }
    };

    SchemaMapper mapper = new SchemaMapper(
            new RuleFactory(config, new Jackson2Annotator(config), new SchemaStore()), new SchemaGenerator());

    mapper.generate(codeModel, apiNodeName, "com.example", apiResultAsString);
    codeModel.build(Files.createTempDirectory("tessst").toFile());

我需要将生成的类保存为代码中的类(类似于:ClassType ClassName = codeModel.build();和文件(已经生成)将来进一步访问。我怎么能这样做?

然后,通过Jackson 将 JSON 输出映射到生成的类来创建对象,并将这些对象保存在集合中。

谢谢

【问题讨论】:

    标签: java json class jackson jsonschema2pojo


    【解决方案1】:

    我们在 jsonschema2pojo 的集成测试中执行此操作,因此请查看这些测试。您需要编译该类,为此您只需要使用任何可以以编程方式调用的编译器 API。

    一旦你有了类文件,你就可以使用对象映射器来创建它的实例。

    【讨论】:

    • 谢谢。你的意思是在文件和代码中都创建类,说We do this in the integration tests in jsonschema2pojo?还必须将课程保存在文件中吗?并且是否可以编译没有文件的类(存在于JCodeModel中)?
    • 您无法编译 jcodemodel。您必须从代码模型中输出 Java 代码,然后对其进行编译。 Jcodemodel 可以输出到任何编写器,它不必是文件(但这可能是最简单的选择)。
    • 谢谢。您对此也有任何想法:stackoverflow.com/q/56196669/190929
    • 关于编译类以便能够使用它们(例如在 objectMapper.Read() 中);我们不能用这个吗? Class cls = Class.forName("com.example.ClassName"); Object obj = cls.newInstance(); Class.forName() 是否编译给定的类?
    • 不,它没有。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 2019-12-12
    • 2016-09-20
    • 2015-05-17
    • 1970-01-01
    • 2014-08-17
    相关资源
    最近更新 更多