Я пытаюсь заставить SwaggerUI выглядеть правильно для меня. У меня есть куча методов POST, и SwaggerUI уже генерирует тело ответа и запроса в веб-интерфейсе, однако тело запроса неверно. Как создать собственное тело запроса для моих методов POST?
SpringFoxConfig -
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.RequestMethod;
import com.google.common.collect.ImmutableList;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.ResponseMessage;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SpringFoxConfig {
@Bean
public Docket apiDocket() {
return new Docket(DocumentationType.SWAGGER_2)
.useDefaultResponseMessages(false)
//.globalResponseMessage(RequestMethod.POST, ImmutableList.of(new ResponseMessage(200, "Some global OK message",null)))
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build()
.apiInfo(getApiInfo());
}
private ApiInfo getApiInfo() {
return new ApiInfo("RESTlike API",
"An Api to call functions",
"",
"",
"",
"",
"");
}
}
Например
Схема, отображаемая в пользовательском интерфейсе,
{
"da": "MD5",
"data": {
"value": [
"string"
]
}
}
Это не правильный ввод и он выдаст ошибку.
правильный ввод будет в этом примере:
{
"da": "MD5",
"data": "String"
}
Откуда поступают данные схемы и как их изменить / переопределить.
Соответствующий метод будет
@ResponseBody
@PostMapping("/digest")
public StringWrapper digestData(@RequestBody DigestDataContainer params) throws IOException {
return new StringWrapper(//code);
}
DigestDataContainer просто содержит байтовый массив «data» и перечисление «da»
Редактировать
Хорошо, я выяснил, почему сгенерированное тело ответа неверно, swagger определяет параметры тела запроса, просматривая общедоступные параметры и все геттеры. Поскольку в моих методах нет только методов получения, связанных с параметрами, в пользовательском интерфейсе отображается слишком много информации.
Вы можете предотвратить отображение параметра в пользовательском интерфейсе, пометив его как
@ApiModelProperty(required = false, hidden = true)
Однако у меня нет уникального тела для каждого моего метода, я сгруппировал некоторые из них, что приводит к тому, что сгенерированное тело запроса в пользовательском интерфейсе не соответствует методу, в котором оно находится. Поэтому я хочу вообще не показывать тело в пользовательском интерфейсе.
- Есть ли способ отключить схему модели для запроса?