我想从Spring Boot 2切换到Micronaut框架。并且我在Swagger设置上苦苦挣扎。
在Spring Boot 2项目中,我具有以下依赖性:
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.1</version>
</dependency>
和SwaggerConfig.class:
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket swagger() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(getApiInfo())
.select()
.apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
.paths(PathSelectors.any())
.build();
}
private ApiInfo getApiInfo() {
return new ApiInfo("test",
"",
"",
"",
new Contact("", "https://test.test", ""),
"",
"");
}
}
它与Spring Boot 2应用程序一起完美启动swagger-ui。
我应该将哪些依赖项添加到maven中,并且应该创建哪些类才能为Micronaut项目获得相同的结果?
答案 0 :(得分:4)
假设已创建应用程序,则将以下内容添加到您的pom.xml
<dependency>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-annotations</artifactId>
<version>${swagger.version}</version>
<scope>compile</scope>
</dependency>
其中属性swagger.version设置为2.0.3
在maven-compiler-plugin中为您的注解处理器路径添加以下内容
<path>
<groupId>io.micronaut.configuration</groupId>
<artifactId>micronaut-openapi</artifactId>
<version>${micronaut.version}</version>
</path>
然后将以下内容添加到您的micronaut路由器部分。
micronaut:
router:
static-resources:
swagger:
paths: classpath:META-INF/swagger
mapping: ${application.api.swagger.path}/**
这将显示您在编译过程中生成的swagger / oas yml文件,前提是您使用以下配置。当然,您可以将${application.api.swagger.path}
更改为/api-docs/swagger
或自己喜欢的东西。
如文档中所述,当您最初创建项目时,还可以执行以下--features=swagger-java
添加上述依赖项。
如果要从应用程序本身呈现api规范,则需要添加更多代码。下面的示例可能比需要的要充实,但是出于我的目的,该应用程序充当了swagger / oas规范的中央渲染器。
首先添加一个满足您所有需求的控制器,然后用@Hidden
对该控制器进行注释,以确保注释处理器不会对其进行处理。
@Hidden
@Controller("/api")
public class SwaggerController {
@Inject
SwaggerConfig config;
@View("swagger/index")
@Get
public SwaggerConfig index() {
return config;
}
}
然后添加以下配置类,该配置类从下面绑定属性
@ConfigurationProperties(SwaggerConfig.PREFIX)
public class SwaggerConfig {
public static final String PREFIX = "application.api.swagger";
private String version;
private String layout;
private boolean deepLinking;
private List<URIConfig> urls;
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public String getLayout() {
return layout;
}
public void setLayout(String layout) {
this.layout = layout;
}
public boolean isDeepLinking() {
return deepLinking;
}
public void setDeepLinking(boolean deepLinking) {
this.deepLinking = deepLinking;
}
public List<URIConfig> getUrls() {
return urls;
}
public void setUrls(List<URIConfig> urls) {
this.urls = urls;
}
@ConfigurationProperties(URIConfig.PREFIX)
public static class URIConfig {
static final String PREFIX = "urls";
private String name;
private String url;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
}
上面的config类绑定了application.yml中的以下配置,但是需要放在特定于micronaut的配置之前。
application:
api:
swagger:
path: /api-docs/swagger
version: 3.19.4
layout: StandaloneLayout
deepLinking: true
urls:
- name: ubw-rest
url: /api-docs/swagger/ubw-rest-0.1.yml
完成后,将以下把手/胡子依赖项添加到pom
<dependency>
<groupId>com.github.jknack</groupId>
<artifactId>handlebars</artifactId>
<version>4.1.0</version>
<scope>runtime</scope>
</dependency>
在resources文件夹下,创建一个名为swagger的文件夹,然后创建一个包含以下内容的index.hbs文件。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Swagger-ui</title>
<link rel="icon" type="image/png" href="https://unpkg.com/swagger-ui-dist@{{version}}/favicon-32x32.png">
<link rel="stylesheet" type="text/css" href="https://unpkg.com/swagger-ui-dist@{{version}}/swagger-ui.css">
<script src="https://unpkg.com/swagger-ui-dist@{{version}}/swagger-ui-standalone-preset.js"></script>
<script src="https://unpkg.com/swagger-ui-dist@{{version}}/swagger-ui-bundle.js"></script>
</head>
<body>
<div id="swagger-ui"></div>
<script>
window.onload = function() {
var ui = SwaggerUIBundle({
urls: [{{#each urls}}
{
name: "{{name}}",
url: "{{url}}"
}{{#unless @last}},{{/unless}}{{/each}}
],
dom_id: '#swagger-ui',
deepLinking: {{deepLinking}},
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl
],
layout: "{{layout}}"
});
window.ui = ui
}
</script>
</body>
</html>
最后,在应用程序主类中,添加@OpenApiDefinition
批注,以使批注处理器能够扫描整个应用程序。
@OpenAPIDefinition(
info = @Info(
title = "swagger-server",
version = "0.1",
description = "My API",
license = @License(name = "Apache 2.0")
)
)
public class Application {
public static void main(String[] args) {
Micronaut.run(Application.class);
}
}
有关Micronaut 1.0.0中的注释处理器的一个建议是,对象上的公共字段将不会公开,因此,如果要查看输入或输出的模式,则需要使用getter / setter方法。返回值。
如果您想尝试上述示例,我有一个位于https://github.com/frehov/micronaut-swagger-server处的swagger服务器配置的仓库,其中包括发布带有url和名称对列表的功能。由Swagger渲染。
答案 1 :(得分:1)
Micronaut能够基于这些注释从我们的控制器和方法自动生成Swagger YAML定义。添加swagger-Annotations依赖项pom.xml。
<dependency>
<groupId>io.swagger.core.v3</groupId>
<artifactId>swagger-annotations</artifactId>
<version>2.0.5</version>
</dependency>
在应用程序的主类中添加@OpenAPIDefinition注释。
@OpenAPIDefinition(
info = @Info(
title = "my app",
version = "1.0",
description = "my api",
contact = @Contact(url = "http://something.com", name = "something", email = "something")
)
)
public class Application {
public static void main(String[] args) {
Micronaut.run(Application.class);
}
}
Micronaut在target / classes / META-INF / swagger / my-app-1.0.yml中生成Swagger文件。我们可以使用HTTP端点在应用程序外部公开它。这是application.yml文件中提供的适当配置。
micronaut:
router:
static-resources:
swagger:
paths: classpath:META-INF/swagger
mapping: /swagger/**
访问路径http://localhost:8080/swagger/my-app-1.0.yml。
与Spring Boot相比,我们没有Swagger之类的项目 SpringFox for Micronaut,所以我们需要将内容复制到在线 编辑器以查看我们的Swagger的图形表示 YAML。
将my-app-1.0.yml的内容粘贴到https://editor.swagger.io/并添加服务器以访问Swagger UI。
阅读Micronaut Doc- https://micronaut-projects.github.io/micronaut-openapi/latest/guide/index.html