首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从POJO生成Json模式

问无法从POJO生成Json模式
EN

Stack Overflow用户
提问于 2018-03-26 10:12:44
回答 2查看 518关注 0票数 1

我使用了一个POJO,它运行得很好,我决定在一堆java类中使用来自FileUtils的org.apache.commons来遍历抛出所有的java文件目录,并在generateSchema()内部使用get类(),但输出不是预期的。

我不知道问题出在哪里?

投入:

代码语言:javascript
复制
File dir = new File("./src/main/java/com/hiveprod/generator/jsonshema");
        String[] extensions = new String[] { "java" };
        System.out.println("Getting POJOs..." );
        List<File> files = (List<File>) FileUtils.listFiles(dir, extensions, true);
            for (File file : files) {
            String className=file.getName();
            //Mapping...
             ObjectMapper mapper = new ObjectMapper();
            JsonSchemaGenerator generator = new JsonSchemaGenerator(mapper);

            JsonSchema jsonSchema = generator.generateSchema(file.getClass());
            StringWriter jsonSchemafile = new StringWriter();
            mapper.configure(SerializationFeature.INDENT_OUTPUT, true);
            mapper.writeValue(jsonSchemafile, jsonSchema);

一个文件的示例

产出:

代码语言:javascript
复制
{
  "type" : "string"
}

预期产出:

代码语言:javascript
复制
{
  "type" : "object",
  "properties" : {
    "result" : {
      "type" : "string"
    },
    "subtitle1" : {
      "type" : "string"
    },
    "infoSup" : {
      "type" : "string"
    },
    "subtitle" : {
      "type" : "string"
    },
    "title" : {
      "type" : "string"
    },
    "info" : {
      "type" : "string"
    }
  }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-27 01:57:33

下面代码的安全性帮助我获取给定包中的所有类。

代码语言:javascript
复制
 private static Class[] getClasses(String packageName)
            throws ClassNotFoundException, IOException {
        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
        assert classLoader != null;
        String path = packageName.replace('.', '/');
        Enumeration resources = classLoader.getResources(path);
        List dirs = new ArrayList();
        while (resources.hasMoreElements()) {
            URL resource = resources.nextElement();
            dirs.add(new File(resource.getFile()));
        }
        ArrayList classes = new ArrayList();
        for (File directory : dirs) {
            classes.addAll(findClasses(directory, packageName));
        }
        return classes.toArray(new Class[classes.size()]);
    }

      private static Class[] getClasses(String packageName)
            throws ClassNotFoundException, IOException {
        ClassLoader classLoader =Thread.currentThread()
       .getContextClassLoader();
        assert classLoader != null;
        String path = packageName.replace('.', '/');
        Enumeration resources = classLoader.getResources(path);
        List dirs = new ArrayList();
        while (resources.hasMoreElements()) {
            URL resource = resources.nextElement();
            dirs.add(new File(resource.getFile()));
        }
        ArrayList classes = new ArrayList();
        for (File directory : dirs) {
            classes.addAll(findClasses(directory, packageName));
        }
        return classes.toArray(new Class[classes.size()]);
    }

了解更多信息:https://dzone.com/articles/get-all-classes-within-package

票数 0
EN

Stack Overflow用户

发布于 2018-03-26 11:27:30

代码语言:javascript
复制
generator.generateSchema(file.getClass());

文件是一个文件,不是你想要的类。我认为您至少需要类,甚至可以实例化它:

代码语言:javascript
复制
Class c = Class.forName(className);
generator.generateSchema(c.getClass());

如果必须实例化它,每个类都应该有一个空的默认构造函数,反射应该得到这个构造函数:

代码语言:javascript
复制
Constructor ctor = c.getConstructor(); // use c again
Object instanceOfTheClass = ctor.newInstance();
generator.generateSchema(instanceOfTheClass.getClass());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49488976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档