Java 有没有办法让Restlet-Swagger扩展限制它所显示的API?

Java 有没有办法让Restlet-Swagger扩展限制它所显示的API?,java,google-app-engine,restlet,swagger,Java,Google App Engine,Restlet,Swagger,有没有办法让Restlet-Swagger扩展限制它所显示的API 我们的API中有一些路径不应该被分解(目前为止),有什么策略可以确保至少只公开特定的org.restlet.routing.Router?由于应用程序中有许多路由器。这是不可能开箱即用的。更简单的方法是IMO修补扩展org.restlet.extension.swagger: 更新类SwaggerSpecificationRestlet的方法getSwagger,以允许更新自检定义筛选,如下所述: public Represe

有没有办法让Restlet-Swagger扩展限制它所显示的API


我们的API中有一些路径不应该被分解(目前为止),有什么策略可以确保至少只公开特定的
org.restlet.routing.Router
?由于应用程序中有许多
路由器

这是不可能开箱即用的。更简单的方法是IMO修补扩展
org.restlet.extension.swagger

  • 更新类
    SwaggerSpecificationRestlet
    的方法
    getSwagger
    ,以允许更新自检定义筛选,如下所述:

    public Representation getSwagger() {
        Definition definition = getDefinition();
        // The method to add for filtering the instropected structure
        filterDefinition(definition);
        Swagger swagger = Swagger2Translator.getSwagger(definition);
        (...)
    }
    
    protected void filterDefinition(Definition definition) {
    }
    
  • 在应用程序中,通过重写方法
    GetSwagger SpecificationRestlet
    配置此类:

    public SwaggerSpecificationRestlet getSwaggerSpecificationRestlet(
                     Context context) {
        SwaggerSpecificationRestlet result
                   = new SwaggerSpecificationRestlet(this) {
            protected void filterDefinition(Definition definition) {
                (...)
            }
        };
        result.setApiInboundRoot(this);
        return result;
    }
    
下面是方法
filterDefinition
的示例:

private Definition filterDefinition(Definition definition) {
    List<Resource> resourcesToRemove = new ArrayList<>();
    Contract contract = definition.getContract();
    for (Resource resource : contract.getResources()) {
        resourcesToRemove.add(resource);
    }

    for (Resource resource : resourcesToRemove) {
        contract.getResources().remove(resource);
    }

    return definition;
}
专用定义过滤器定义(定义){
List resourcesToRemove=新建ArrayList();
合同=定义。getContract();
for(资源:contract.getResources()){
resourcesToRemove.add(资源);
}
for(资源:resourcesToRemove){
contract.getResources().remove(资源);
}
返回定义;
}
希望它能帮助你,
Thierry

在SwaggerSpecificationRestlet类中没有getSwagger()方法?版本2.3.1我尝试在我的代码中添加日志,唯一触发的是getSwagger SpecificationRestlet()方法,而不是filterDefinition()看到了吗?这是因为getSwagger()未被重写?但是我找不到那种方法。。。