gpt4 book ai didi

java - QueryParam 在 Swagger API 中声明为不需要

转载 作者:太空宇宙 更新时间:2023-11-04 10:11:42 26 4
gpt4 key购买 nike

我已经实现了一个 Jax-RS 资源(使用 Dropwizard),其中包含此方法:

import javax.ws.rs.DefaultValue;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.POST;
import javax.ws.rs.QueryParam;
import org.hibernate.validator.constraints.NotEmpty;
[...]

@POST
@Timed
public Prediction predict(
@QueryParam("content") @NotEmpty String content,
@HeaderParam("outputProbability") @DefaultValue("false") Boolean outputProbability) {
return outputProbability ? getPredictionWithProb(content) : getPrediction(content);
}

在我的 pom.xml 中,我添加了 swagger-maven-plugin,如下所示:

        <plugin>
<groupId>com.github.kongchen</groupId>
<artifactId>swagger-maven-plugin</artifactId>
<version>${swagger-maven-plugin-version}</version>
<configuration>
<apiSources>
<apiSource>
<springmvc>false</springmvc>
<schemes>
<scheme>http</scheme>
</schemes>
<locations>[...]</locations>
<info>[...]</info>
<swaggerDirectory>src/main/resources/swagger</swaggerDirectory>
</apiSource>
</apiSources>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>

当我运行 mvncompile 时,它会创建包含以下条目的 swagger.json 文件:

"paths" : {
"/predict" : {
"post" : {
"operationId" : "predict",
"produces" : [ "application/json" ],
"parameters" : [ {
"name" : "content",
"in" : "query",
"required" : false,
"type" : "string"
}, {
"name" : "outputProbability",
"in" : "header",
"required" : false,
"type" : "boolean",
"default" : false
} ],
[...]

这一切都很好,除了 content 参数定义中的一行:

      "required" : false,

但是,content 字段显然是必需的。当我调用该服务时也证实了这一点:如果未提供 content 参数,则会抛出错误。

来自this answer ,似乎我可以使用 Swagger @ApiParam annotation 明确声明该参数是必需的。 。但是,我不希望仅仅为了 Swagger API 定义的目的而引入额外的代码和依赖项。

这看起来是一个相当小的问题,但它可能表明我的代码甚至 swagger-maven-plugin 中存在错误。我错过了什么吗?

Swagger 插件是否无法识别 @org.hibernate.validator.constraints.NotEmpty 注释?如果没有,Swagger @OpenAPI 参数是声明 Swagger 插件所需参数的唯一方法吗?

最佳答案

我发现的唯一可行的解​​决方案是确实使用 @ApiParam 注释,如下所示:

import io.swagger.annotations.ApiParam;
[...]


@POST
@Timed
public Prediction predict(
@QueryParam("content") @NotEmpty @ApiParam(required = true) String content,
@HeaderParam("outputProbability") @DefaultValue("false") Boolean outputProbability) {

当然,这需要额外的 Swagger 依赖项(在 pom.xml 中):

    <dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.21</version>
</dependency>

关于java - QueryParam 在 Swagger API 中声明为不需要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52218407/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com