Как создать несколько схем в @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) {

}
Другие вопросы по тегам