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…

OpenAPI 3.0.1是一种用于描述和定义RESTful API的规范。它提供了一种标准的方式来描述API的端点、参数、请求和响应等信息。根据提供的引用内容,可以看出在后端项目中,通过使用OpenAPI 3.0.1规范的依赖包和插件,可以将JSON文件转换OpenAPI 3.0.1格式的文档,并通过访问相应的接口来展示API页面。具体的使用方式是引入依赖包org.microprofile-ext.openapi-ext的openapi-ui版本1.1.5,并在项目启动后访问http://localhost:8080/xxx/openapi-ui接口来查看API页面。这个接口实际上是先访问http://localhost:8080/openapi接口获取OpenAPI文档,然后通过ui插件OpenApiUiService进行渲染展示到页面上。更多详细信息可以参考提供的引用内容中的博主的文章。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [OpenApi3对象定义JSONObjectjson文件之间转换。](https://blog.csdn.net/u012196940/article/details/123396252)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [OpenAPI指南](https://blog.csdn.net/xiaoyi52/article/details/121198620)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值