OpenApi3对象与类定义,JSONObject,json文件之间的转换。

背景:项目中需要扫描注解然后,把有对应注解的方法,生成OpenApi3格式的json返回给前台。由于中间涉及到转发,所以存在OpenApi3对象与json之间的转化。【其实直接把OpenApi3对象序列化了不就行了么。我也是不知道为什么需求就变的奇奇怪怪的,总之把遇到的难点记录下来就是了】

第一部分
JSONObject转OpenApi3

由于下游接口没做好看,我自己从文件读了一组数据出来
这个过程先是JSONObject直接toString转JsonNode
然后就用OpenApi3Parser的转化方法把Node转化成了OpenApi3对象。
需要注意的是OpenApi3Parser的转化方法除了JsonNode一定要一个路径作为输入,这个路径对应的File会作为一个临时文件使用,不影响批量转化。要说为何,那只能说他源码就这样啊。。。
这题提供一下jar包名称:
openapi-parser-4.0.4.jar

    public List<OpenApi3> getOpenApi3FromMS() throws Exception{
        String s = FileUtils.readFileToString(new File("/Users/i562941/Documents/1.txt"));
        //     System.out.println(s);

        JSONArray ja = JSONArray.parseArray(s);
        List<OpenApi3> o3s = new ArrayList<OpenApi3>();

        for (Object o : ja) {
            //tmpfile
            OpenApi3Parser openApi3Parser = new OpenApi3Parser();
            ObjectMapper mapper = new ObjectMapper();
            JsonNode jsonNode = mapper.readTree(o.toString());
            //        System.out.println(jsonNode.toString());
            //String classPath = Thread.currentThread().getContextClassLoader().getResource("/").getPath();
            String classPath = "";
            classPath = classPath == null ? "" : classPath;
            //   System.out.println("cp:" + classPath);
            //OpenApi3 execute parse need a tmpfile,Tested,this file reusable
            OpenApi3 openApi3 = openApi3Parser.parse(jsonNode, new URI("file", null, classPath + "/tmp.txt", null).toURL());
            o3s.add(openApi3);
            System.out.println(openApi3.toString());
        }

        //every Object as a File


        return o3s;
    }

第二部分 json文件转OpenApi3


    List<OpenApi3> getOpenApi3FromDocument(List<File> files) {
        List o3s = new ArrayList<OpenApi3>();
        for (File file : files) {
            OpenApi3Parser openApi3Parser = new OpenApi3Parser();
            List<ServiceMethod> events = new ArrayList<>();
            OpenApi3 openApi3 = null;
            try {
                openApi3 = openApi3Parser.parse(file);
            } catch (Exception e) {
                log.error("[EventTypeServiceResolverImpl#parseEventsFromDocument] Failed to parse event metadata by file [{}].", file.getName(), e);
                throw new ApplicationRuntimeException(ErrorCode.ERR_EVENT_TYPE_PARSE);
            }
            o3s.add(openApi3);
        }
        return o3s;
    }

第三部分 类定义 Method转OpenApi3对象
初步说一下。用到的是Swagger源码中的技术。
swagger-core:1.5.22
ModelConverters这个类可以好好看一下。
具体的代码现在还没有。过几天看看。
TO BE CONTINUE…

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值