Как создать несколько схем в @RequestBody спецификации OpenAPI 3.0 Swagger с помощью Springdoc?
У меня есть приведенный ниже api, для которого мне нужно иметь два параметра типа контента application/x-www-form-urlencoded
и поэтому я использую @RequestBody
вместо того @Parameter
@Operation(summary = "Revoke given permissions", description = "Allows admin to revoke permissions to users")
@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public void revokePermission(
@RequestBody(description = "the permission id", content = @Content(mediaType = "application/x-www-form-urlencoded",
schema = { @Schema(type = "String", name = "permission_id",
description = "id of the permission to be revoked", required = true)},
{ @Schema(type = "String", name = "permission_type",
description = "the permission type")}))
String permission_id, String permissionType) {
do_something();
}
Мне нужно, чтобы swagger.json был похож на приведенный ниже пример, но я не знаю, как его сгенерировать с помощью springdoc. Я также пробовал @ArraySchema, но я не получаю нужного мне результата. Я допускаю некоторые ошибки в синтаксисе и не могу найти примеры в Интернете.
"requestBody": {
"content": {
"application/x-www-form-urlencoded": {
"schema": {
"properties": {
"permission_id": {
"description": "id of the permission to be revoked",
"type": "string"
},
"permission_type": {
"description": "the permission type",
"type": "string"
}
},
"required": ["permission_id"]
}
}
}
}
Любая помощь высоко ценится. TIA
1 ответ
Самый простой способ добиться того, чего вы хотите, - это определить данные разрешений в простом объекте следующим образом:
@Schema(name = "permissionData")
public class PermissionData {
@Schema(type = "String", name = "permiddionId", description = "id of the permission to be revoked", required = true)
@JsonProperty("permiddionId")
String permiddionId;
@Schema(type = "String", name = "permissionType",description = "the permission type")
@JsonProperty("permissionType")
String permissionType;
}
И затем метод контроллера:
@Operation(summary = "Revoke given permissions", description = "Allows admin to revoke permissions to users")
@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public void revokePermission(@RequestBody(description = "the permission data") PermissionData permissionData) {
}