OpenAPI自定义生成器如何禁止生成AllOf类及继承AllOf模型
根源解决方案(推荐)
你遇到的AllOf后缀类是OpenAPITools处理allOf中匿名对象时的默认生成逻辑,直接关闭匿名对象独立生成类的开关即可,不需要额外做过滤。
在你自定义的TypeScriptAngularClientCodegen子类的构造方法中添加如下配置:
public CustomAngularClientCodegen() { super(); // 禁止将allOf中的匿名组合对象生成独立的*AllOf类 this.setGenerateAliasAsModel(false); }
配置后生成器会直接把allOf中匿名对象的字段合并到当前主模型,不会再生成ChangePasswordAllOf这类中间类,allOf列表里也不会再出现AllOf后缀的项,配合你已经做好的导入过滤逻辑,就能直接输出你期望的代码效果。
备选方案:现有逻辑下过滤继承项
如果你不方便修改生成逻辑,只需要过滤继承列表中的AllOf后缀项,可以重写postProcessModel方法处理allOf列表:
@Override public Map<String, Object> postProcessModel(Map<String, Object> model) { model = super.postProcessModel(model); if (model.containsKey("allOf")) { List<String> allOfList = (List<String>) model.get("allOf"); List<String> filtered = allOfList.stream() .filter(className -> !className.endsWith("AllOf")) .collect(Collectors.toList()); if (filtered.isEmpty()) { model.remove("allOf"); } else { model.put("allOf", filtered); } } return model; }
该方法会在模板渲染前就把继承列表里的AllOf类删掉,不需要修改原有模板就能得到正确的继承声明。
内容的提问来源于stack exchange,提问作者dapperdandev
相关产品推荐
相关产品推荐

