Home > database >  Schema validation failed by Swagger/OpenAPI online validator
Schema validation failed by Swagger/OpenAPI online validator

Time:10-11

I have a config my Swagger schema, /api-docs -> openapi 3.0.1:

@Configuration
    public class SwaggerConfig {
        @Bean
        public OpenAPI customOpenAPI() {
            return new OpenAPI()
                    .components(new Components().addSecuritySchemes("Bearer",
                            new SecurityScheme().type(SecurityScheme.Type.HTTP).scheme("Bearer")
                                    .in(SecurityScheme.In.HEADER).name("Authorization")))
                    .info(new Info().title("SSM API").version("0.1"));
        }
    }

Example of controller:

@Tag(name = "MetalBalance", description = "Контроллер баланса металла")
@RestController
@RequestMapping(path = "/metal-balance", produces = MediaType.APPLICATION_JSON_VALUE)
@SecurityRequirement(name = "Bearer")
@ResponseBody
@RequiredArgsConstructor
public class MetalBalanceController {
...
    @DeleteMapping("/operations/{id}")
    @Operation(summary = "Удаление операции над агрегатом")
    @Parameters(value = {
            @Parameter(in = ParameterIn.PATH, name = "id", example = "720050516121420278143",
                    description = "Идентификатор операции",
                    content = @Content(schema = @Schema(type = "integer"))),
    })
    @RolesAllowed({"MASTER_SHIHTA", "NACH_SMEN_VZKKC1", "MASTER_KONV", "FERRO_R6", "NACH_SMEN_VZKKC1", "FERRO_R", "DESIGNER",
            "KONV_R", "LAB_ST_PR", "NACH_SMEN_VZKKC1", "NACH_UPPVS", "ING_CEN_CEH", "RAB_UPK", "UPK_R",
            "MASTER_VAK", "VAK_R", "R_VAKUUMAT", "MASTER_UDM", "UDM_R"})
    public void deleteOperation(@PathVariable("id") BigInteger operationId) {
        balanceService.deleteUnitOperation(operationId);
    }
}

openapi response, what i have from '/api-docs' endpoint:

"/metal-balance/operations/{id}": {
"delete": {
"tags": [
"MetalBalance"
],
"summary": "Удаление операции над агрегатом",
"operationId": "deleteOperation",
"parameters": [
{
"name": "id",
"in": "path",
"description": "Идентификатор операции",
"required": true,
"example": 720050516121420300000,
"content": {
"*/*": {
"schema": {
"type": "integer"
}}}}],
"responses": {
"200": {
"description": "OK"
},
"400": {
"description": "Bad Request",
"content": {
"*/*": {
"schema": {
"type": "object"
}}}}},
"security": [
{
"Bearer": []}
 ]}}

When I try to validate it by Swagger/OpenAPI online validator I recieved the exceptions, attached: Validation Error

How to tune my config correct?

Thanks in advance!

CodePudding user response:

There's no need to wrap the schema into content in case of path parameters and primitive parameters in general (i.e. numbers/strings/booleans). The @Content annotation is typically only used with request bodies and responses.

Replace

            @Parameter(in = ParameterIn.PATH, name = "id", example = "720050516121420278143",
                    description = "Идентификатор операции",
                    content = @Content(schema = @Schema(type = "integer"))),

with

            @Parameter(in = ParameterIn.PATH, name = "id", example = "720050516121420278143",
                    description = "Идентификатор операции",
                    schema = @Schema(type = "integer")),  // <----------
  • Related