Я реализовал ресурс 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>
Когда я запускаю mvn compile
, он создает файл 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
не указан, выдается ошибка.
Из этого ответа кажется, что я мог бы явно указать, что параметр требуется, используя аннотацию Swagger @ ApiParam . Однако я бы предпочел не вводить дополнительный код и зависимости только для целей определения API Swagger.
Это выглядит как незначительная проблема, но это может указывать на ошибку в моем коде или даже в swagger-maven-plugin
. Я что-то пропустил?
Плагин Swagger не распознает аннотацию @org.hibernate.validator.constraints.NotEmpty
? Если это не так, является ли параметр Swagger @OpenAPI
единственным способом объявить параметр, требуемый для плагина Swagger?