Rest 大摇大摆的grails集成

Rest 大摇大摆的grails集成,rest,api,grails,groovy,swagger,Rest,Api,Grails,Groovy,Swagger,我是swagger新手,我想使用grails框架将swagger集成到RESTfulAPI项目中。如果有人知道我做错了什么,请帮忙 我的grails规范如下: | Grails Version: 3.0.7 | Groovy Version: 2.4.4 | JVM Version: 1.8.0_71 对swagger进行了如下设置: | Grails Version: 3.0.7 | Groovy Version: 2.4.4 | JVM Ve

我是swagger新手,我想使用grails框架将swagger集成到RESTfulAPI项目中。如果有人知道我做错了什么,请帮忙

我的grails规范如下:

    | Grails Version: 3.0.7
    | Groovy Version: 2.4.4
    | JVM Version: 1.8.0_71
对swagger进行了如下设置:

    | Grails Version: 3.0.7
    | Groovy Version: 2.4.4
    | JVM Version: 1.8.0_71
在build.gradle中:

    dependencies {
        ...
        compile "io.swagger:swagger-core:1.5.3"
        compile "io.swagger:swagger-jaxrs:1.5.3"
        ...
    }
在resources.groovy中

    import io.swagger.jaxrs.config.BeanConfig
    beans = {
        swaggerConfig(BeanConfig) {
            def serverUrl = "http://localhost:8080/" 
            def hostName = "localhost:8080" 
            resourcePackage = "grails.rest.example" 
            host = hostName
            basePath = "/api"
            version = 'v0' // Default "1".
            title = 'Core Registration API, Version V0' 
            description = 'API for Accessing secured resources'
            contact = 'testtest@mailinator.com'
            license = ''
            licenseUrl = ''
        }

        corsFilter(CorsFilter)
    }
添加了控制器ApiDocController.groovy:

    package grails.rest.example.apidoc

    import grails.web.mapping.LinkGenerator

    class ApiDocController {
        LinkGenerator grailsLinkGenerator
        def apiDocService
        def index = {
            String basePath = grailsLinkGenerator.serverBaseURL
            render(view: 'index', model: [apiDocsPath: "${basePath}/api/swagger-json"])
            //render(view: 'index', model: [apiDocsPath: "localhost:8080/api/swagger-json"])
            //render(view: 'index', model: [apiDocsPath: "localhost:8080/dist/index.html"])

        }
        def swaggerJson = {
            render apiDocService.generateJSON()
        }
    }
添加了控制器的URL映射:

    "/api/info"(controller: 'ApiDoc')
    "/"(controller: 'Index')
    "500"(controller: 'InternalServerError')
    "404"(controller: 'NotFound')
添加了一个服务ApiDocService.groovy:

    //package com.care.apidoc
    package grails.rest.example.apidoc

    import io.swagger.jaxrs.config.BeanConfig
    import grails.transaction.Transactional
    import io.swagger.util.Json

    @Transactional
    class ApiDocService {

        def swaggerConfig

        /*
         * generates SWAGGer JSON
         */
        def generateJSON() {

            String[] schemes = ["http"] as String[]
            swaggerConfig.setSchemes(schemes)
            swaggerConfig.setScan(true)
            def swagger = swaggerConfig.getSwagger()

            Json.mapper().writeValueAsString(swagger);
        }
    }
在src/main/webapp/dist文件夹中添加了招摇用户界面

    with a working customised API URL "http://localhost:8080/api/orders" in index.html
在src/main/groovy/CorsFilter.groovy中添加了CorsFilter设置

    import org.springframework.web.filter.OncePerRequestFilter
    import javax.annotation.Priority
    import javax.servlet.FilterChain
    import javax.servlet.ServletException
    import javax.servlet.http.HttpServletRequest
    import javax.servlet.http.HttpServletResponse

    @Priority(Integer.MIN_VALUE)
    public class CorsFilter extends OncePerRequestFilter {

        public CorsFilter() { }

        @Override
        protected void doFilterInternal(HttpServletRequest req, HttpServletResponse resp, FilterChain chain)
        throws ServletException, IOException {

            String origin = req.getHeader("Origin");

            boolean options = "OPTIONS".equals(req.getMethod());
            resp.addHeader("Access-Control-Allow-Headers", "origin, authorization, accept, content-type, x-requested-with");
            resp.addHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS");
            resp.addHeader("Access-Control-Max-Age", "3600");

            resp.addHeader("Access-Control-Allow-Origin", origin == null ? "*" : origin);
            resp.addHeader("Access-Control-Allow-Credentials", "true");

            if (!options) chain.doFilter(req, resp);
        }
    }
在启动服务器时。 然而,当我尝试在Swagger UI索引文件中加载API时,orders的API工作正常。它显示了。 规范中未定义任何操作

附在图片上。 你看过吗

下面是一个托管在Heroku中的示例,演示了springfox与它集成以生成开放API规范2.0 fka Swigger中的服务描述的能力。演示的源代码是

您可以看到这个演示在这里实时运行,演示由grails应用程序生成并使用swagger ui呈现的开放API规范

使这成为可能的图书馆是。它即将发布,可能需要一些工作才能使其成为grails插件。下面介绍了如何在库存储库中配置此功能

注意:这只适用于Grails3.x


这也是一个著名的图书馆在比赛中展示。非常感谢改进此库的反馈。

是提供Swagger规范的端点吗?因为从表面上看,这只是某条路径的终点。。。您需要将Swagger规范JSON加载到Swagger ui中。它不会自动发现您的API或任何东西。您遵循了什么安装指南?您的步骤看起来比中的步骤复杂得多,现在我已经用指南更新了项目。它很好用。但是,与Springfox相比,需要向控制器添加更多注释。目前,我们可以基于grails版本使用这两个插件。rahulsom.github.io/swaggydoc/guide/installation.html或直接使用grails的招摇过市会造成许多障碍。斯威格团队将在不久的将来发布新版本。是的,我看到了这个。谢谢你,迪利普,谢谢你的帮助。请告诉我,此Springfox是否与grails 3.0.1兼容?编译Springfox grails run app时出错-stacktrace |运行grails CLI时出错:未找到名称[rest api]的配置文件。注意:堆栈跟踪已被筛选。使用-verbose查看整个跟踪。java.lang.IllegalStateException:未找到名称[rest api]的配置文件。位于org.grails.cli.GrailsCli.initializeProfileGrailsCli.groovy:354位于org.grails.cli.GrailsCli.executeGrailsCli.groovy:196位于org.grails.cli.GrailsCli.maingailscli.groovy:99@AtifHussainRESTAPI配置文件仅在3.1版本之后才可用,但是任何常规的Grails3应用程序也应该得到开箱即用的支持。非常感谢迪利普Krishnan@DilipKrishnanspringfox是否与OAS3.0配合使用?您是否计划维护springfox grails集成?