Swagger grails集成 [英] Swagger grails Integration

查看:246
本文介绍了Swagger grails集成的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是新来的笨蛋,我想使用grails框架将Swagger集成到Restful API项目中。如果有人知道我做错了什么,请帮忙吗?



我的grails规范如下:

  | Grails版本:3.0.7 
| Groovy版本:2.4.4
| JVM版本:1.8.0_71

为swagger设置了一些设置:

in build.gradle:

 依赖关系{
...
编译io.swagger:swagger-core:1.5.3
编译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
asePath =/ api
version ='v0'// Default1 。
title ='Core Registration API,Version V0'
description ='访问受保护资源的API'
contact ='testtest@mailinator.com'
license =''
licenseUrl =''
}

corsFilter(CorsFilter)
}

添加了一个控制器ApiDocController.groovy:

  package grails.rest.example.apidoc 

导入grails.web.mapping.LinkGenerator

类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()
}
}

为控制器添加了URLMapping:



< (控制器:'索引')
500(控制器:'InternalServerError')pre $ ')
404(controller:'NotFound')

新增了一个ApiDocService服务。 groovy:

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

导入io.swagger.jaxrs.config.BeanConfig
导入grails.transaction.Transactional
导入io.swagger.util.Json

@Transactional
class ApiDocService {

def swaggerConfig
$ b $ * / *
*生成SWAGGer JSON
* /
def generateJSON(){

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

Json.mapper()。writeValueAsString(swagger);






$ b 在src / main / webapp / dist文件夹

 ,其中包含index.html中的工作定制API URLhttp:// localhost:8080 / api / orders

在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扩展了OncePerRequestFilter {

public CorsFilter(){}
$ b @Override
protected void doFilterInternal(HttpServletRequest req,HttpServletResponse resp,FilterChain链)
throws ServletException,IOException {

String origin = req.getHeader(Origin);

布尔选项=选项.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);
}
}

启动服务器。
API的订单工作正常,但是,当我尝试在Swagger UI索引文件中加载API时。表明。
没有在spec中定义的操作!


附在照片中。

解决方案

你看过 springfox 吗?

以下是样本Grails应用程序在Heroku中托管,演示了与其集成的springfox在Open API规范2.0(fka swagger)中生成服务描述的功能。演示的源代码是此处可用



您可以在这里看到演示,演示由grails应用程序生成的Open API规范,并使用swagger-ui进行呈现。

使这成为可能是 springfox-grails-集成库。它即将被释放,可能需要一点点工作才能成为Grails插件。关于如何配置库存储库的一些初步文档



注意:这只适用于grails 3.x



另外它是一个值得注意的库, a href =https://objectcomputing.com/products/grails/show-us-your-grails/ =nofollow noreferrer>展示你的GRAILS 比赛。反馈,以改善这个图书馆非常感谢。


I am new to swagger and I want to integrate swagger to Restful API project using grails framework. Please help if anybody have any idea what i am doing wrong?

my grails specification as below:

    | Grails Version: 3.0.7
    | Groovy Version: 2.4.4
    | JVM Version: 1.8.0_71

Did some settings for swagger as below:

in build.gradle:

    dependencies {
        ...
        compile "io.swagger:swagger-core:1.5.3"
        compile "io.swagger:swagger-jaxrs:1.5.3"
        ...
    }

in 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)
    }

Added a Controller 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()
        }
    }

Added a URLMapping for controller:

    "/api/info"(controller: 'ApiDoc')
    "/"(controller: 'Index')
    "500"(controller: 'InternalServerError')
    "404"(controller: 'NotFound')

Added a service 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);
        }
    }

added Swagger-ui in src/main/webapp/dist folder

    with a working customised API URL "http://localhost:8080/api/orders" in index.html

added CorsFilter setting in src/main/groovy/CorsFilter.groovy

    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);
        }
    }

On starting the server. API for orders is working correctly, however, when I try to load the API in Swagger UI index file. it shows. No operations defined in spec!

as attached in a pics.

解决方案

Have you looked at springfox?

Here is a sample Grails Application hosted in Heroku that demonstrates the capabilities of springfox integrating with it to produce the service description in the Open API specification 2.0 (fka swagger). The source code for the demo is available here.

You can see this demo running live here demonstrating the Open API specification generated by the grails application and rendered using swagger-ui.

The library that makes this possible is springfox-grails-integration library. It is about to be released and probably needs a little bit of work to make it a grails plugin. There is some preliminary documentation of how to configure this the library repository.

NOTE: This only works with grails 3.x

Also it was a notable library showcased in the SHOW US YOUR GRAILS contest. Feedback to improve this library is much appreciated.

这篇关于Swagger grails集成的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆