如何为通过 Sparkjava 构建的 API 创建 API 文档?

问题描述 投票:0回答:1

我正在构建一个 Java 应用程序,该应用程序使用 REST API 的“spark java”框架。这是一个很好的简单框架。但我需要创建自动生成的文档。我发现 Swagger 对此有好处。我已经在我的 Spring Boot 应用程序中使用了它。我找到了这篇文章:

Swagger 和 Spark Java 集成

它有效。但有一个问题。我的项目中没有任何依赖注入。在本文中使用了这种结构:

@Api
@Path("/user")
@Produces("application/JSON")
public class CreateUserRoute implements Route {

    @POST
    @ApiOperation(value = "Creates a new user", nickname="CreateUserRoute")
    @ApiImplicitParams({ //
            @ApiImplicitParam(required = true, dataType="string", name="auth", paramType = "header"), //
            @ApiImplicitParam(required = true, dataType = "ro.serol.spark_swagger.route.request.CreateUserRequest", paramType = "body") //
    }) //
    @ApiResponses(value = { //
            @ApiResponse(code = 200, message = "Success", response=User.class), //
            @ApiResponse(code = 400, message = "Invalid input data", response=ApiError.class), //
            @ApiResponse(code = 401, message = "Unauthorized", response=ApiError.class), //
            @ApiResponse(code = 404, message = "User not found", response=ApiError.class) //
    })
    public User handle(@ApiParam(hidden=true) Request request, @ApiParam(hidden=true)Response response) throws Exception {
        return new User();
    }

}

作者刚刚返回

new User();

他使用反射来创建 Spark 路由(RouteBuilder)。但当我使用服务时它不起作用。或者它可能过于复杂(通过反射将服务注入到路由)。

我的问题:

  1. 如何解决这个困境(注入)并使用spark java + swagger?
  2. 有人可以分享一篇更好的文章/解决方案来为 Spark java 创建 API 文档吗?
java swagger spark-java
1个回答
0
投票

我意识到这是一篇较旧的帖子,但想分享此问题的解决方案,以防其他人遇到此问题。

您在 2016 年的原始帖子中分享的链接不再可用(archive.org 除外),但它确实提供了一些关于让 Swagger 与 Spark 配合使用的好提示。

代码示例虽然有点冗长,但不适用于路由的 lambda 表达式。

我最近使用最新版本的Spark(2.9.4)迁移了一个项目,它完全支持Swagger注释并使用GET和POST请求进行了测试。此代码最近刚刚推送到 https://github.com/ericblue/spark-starter-basic/

您可以使用以下语法在控制器类中定义路由:

get("/api/config", this::testGetConfiguration);

您可以在以下位置查看注释语法和示例:https://github.com/ericblue/spark-starter-basic/blob/main/src/main/java/com/ericblue/spark/starter/controllers/api/SampleAPIController .java

这个神奇之处是由 2016 年原始帖子的作者实现的,但这些示例的优点是使用 lambda 语法,不需要手动定义路由。

© www.soinside.com 2019 - 2024. All rights reserved.