我正在构建一个 Java 应用程序,该应用程序使用 REST API 的“spark java”框架。这是一个很好的简单框架。但我需要创建自动生成的文档。我发现 Swagger 对此有好处。我已经在我的 Spring Boot 应用程序中使用了它。我找到了这篇文章:
它有效。但有一个问题。我的项目中没有任何依赖注入。在本文中使用了这种结构:
@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)。但当我使用服务时它不起作用。或者它可能过于复杂(通过反射将服务注入到路由)。
我的问题:
我意识到这是一篇较旧的帖子,但想分享此问题的解决方案,以防其他人遇到此问题。
您在 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 语法,不需要手动定义路由。