Аннотация Swagger Scala для примеров

#scala #swagger #akka-http #swagger-akka-http

#scala #swagger #akka-http #swagger-akka-http

Вопрос:

Я использую аннотацию swagger в проекте scala (используя swagger-akka-http

И я пытаюсь привести несколько явных примеров полезных нагрузок

Попытка этого :

  @POST
  @Consumes(Array(MediaType.APPLICATION_JSON))
  @Produces(Array(MediaType.APPLICATION_JSON))
  @Operation(summary = "Creates a spark job with a given config", description = "Creates a spark job with a given config", tags = Array("Spark One time Job"),
    requestBody = new RequestBody(content = Array(new Content(
      schema = new Schema(implementation = classOf[pmConfig]),
      examples = Array(new ExampleObject(value = """{
                                                   |  "schema": [
                                                   |            {
                                                   |                "format": "None",
                                                   |                "ColumnName": "Service ID",
                                                   |                "DataType": "string"
                                                   |            },
                                                   |            {
                                                   |                "format": "None",
                                                   |                "ColumnName": "Operation",
                                                   |                "DataType": "string"
                                                   |            },
                                                   |            {
                                                   |                "format": "None",
                                                   |                "ColumnName": "Agent",
                                                   |                "DataType": "string"
                                                   |            },
                                                   |            {
                                                   |                "format": "None",
                                                   |                "ColumnName": "Service Type",
                                                   |                "DataType": "string"
                                                   |            },
                                                   |            {
                                                   |                "format": "None",
                                                   |                "ColumnName": "Product",
                                                   |                "DataType": "string"
                                                   |            },
                                                   |            {
                                                   |                "format": "None",
                                                   |                "ColumnName": "Customer ID",
                                                   |                "DataType": "string"
                                                   |            },
                                                   |            {
                                                   |                "format": "None",
                                                   |                "ColumnName": "Agent Position",
                                                   |                "DataType": "string"
                                                   |            },
                                                   |            {
                                                   |                "format": "d.M.yy H:m",
                                                   |                "ColumnName": "End Date",
                                                   |                "DataType": "timestamp"
                                                   |            },
                                                   |            {
                                                   |                "format": "d.M.yy H:m",
                                                   |                "ColumnName": "Start Date",
                                                   |                "DataType": "timestamp"
                                                   |            }
                                                   |        ],
                                                   |  "Dataset_Name": "CallCenter",
                                                   |  "Dataset_Description": "CallCenter",
                                                   |  "Dataset_Source": {
                                                   |    "Source": "/services/databases/ORG_*******/CallCenter"
                                                   |  },
                                                   |  "Description": "Call Center analysis",
                                                   |  "Filter": [
                                                   |    {
                                                   |      "Description": "None",
                                                   |      "Name": "None",
                                                   |      "Type": "None",
                                                   |      "Value": "None"
                                                   |    }
                                                   |  ],
                                                   |  "Groups": [
                                                   |    {
                                                   |      "Description": "None",
                                                   |      "Name": "None",
                                                   |      "Type": "None",
                                                   |      "Value": "None"
                                                   |    }
                                                   |  ],
                                                   |  "ID": "PAM_000001",
                                                   |  "Mapping": {
                                                   |    "Activity": "Operation",
                                                   |    "Case_ID": "Service ID",
                                                   |    "End_time": "End Date",
                                                   |    "Other_attributes": "true",
                                                   |    "Requester": "None",
                                                   |    "Resource": "Agent",
                                                   |    "Resource_group": "Agent Position",
                                                   |    "Scheduled_end": "None",
                                                   |    "Scheduled_start": "None",
                                                   |    "Start_time": "Start Date"
                                                   |  },
                                                   |  "Name": "CallCenter",
                                                   |  "Organization": "01dxjp1rpa35bzcv1kvem9ffyk",
                                                   |  "Schedule": {
                                                   |    "Schedule": "every5min",
                                                   |    "isSchedule": "false"
                                                   |  },
                                                   |  "reference": "121423525253"
                                                   |}""".stripMargin))
    ))),
    responses = Array(
      new ApiResponse(responseCode = "200", description = "Add response",
        content = Array(new Content(schema = new Schema(implementation = classOf[ActionPerformed])))),
      new ApiResponse(responseCode = "500", description = "Internal server error",
        content = Array(new Content(schema = new Schema(implementation = classOf[ActionPerformed]))))))
 

Выдает ошибки компиляции, такие как :

 [error] /Users/*****/Documents/github/*****/src/main/scala/com/*****/labs/orchestrator/api/ProcessMiningRoutes.scala:152:58: annotation argument needs to be a constant; found: scala.Predef.augmentString("{n                                                   |  "schema": [n                                                   |            {n                                                   |                "format": "None",n                                                   |                "ColumnName": "Service ID",n                                                   |                "DataType": "string"n                                                   |            },n                                                   |            {n                                                   |                "format": "None",n                                                   |                "ColumnName": "Operation",n                                                   |                "DataType": "string"n                                                   |            },n                                                   |            {n                                                   |                "format": "None",n                                                   |                "ColumnName": "Agent",n                                                   |                "DataType": "string"n                                                   |            },n                                                   |            {n                                                   |                "format": "None",n                                                   |                "ColumnName": "Service Type",n                                                   |                "DataType": "string"n                                                   |            },n                                                   |            {n                                                   |                "format": "None",n                                                   |                "ColumnName": "Product",n                                                   |                "DataType": "string"n                                                   |            },n                                                   |            {n                                                   |                "format": "None",n                                                   |                "ColumnName": "Customer ID",n                                                   |                "DataType": "string"n                                                   |            },n                                                   |            {n                                                   |                "format": "None",n                                                   |                "ColumnName": "Agent Position",n                                                   |                "DataType": "string"n                                                   |            },n                                                   |            {n                                                   |                "format": "d.M.yy H:m",n                                                   |                "ColumnName": "End Date",n                                                   |                "DataType": "timestamp"n                                                   |            },n                                                   |            {n                                                   |                "format": "d.M.yy H:m",n                                                   |                "ColumnName": "Start Date",n                                                   |                "DataType": "timestamp"n                                                   |            }n                                                   |        ],n                                                   |  "Dataset_Name": "CallCenter",n                                                   |  "Dataset_Description": "CallCenter",n                                                   |  "Dataset_Source": {n                                                   |    "Source": "/services/databases/ORG_*****/CallCenter"n                                                   |  },n                                                   |  "Description": "Call Center analysis",n                                                   |  "Filter": [n                                                   |    {n                                                   |      "Description": "None",n                                                   |      "Name": "None",n                                                   |      "Type": "None",n                                                   |      "Value": "None"n                                                   |    }n                                                   |  ],n                                                   |  "Groups": [n                                                   |    {n                                                   |      "Description": "None",n                                                   |      "Name": "None",n                                                   |      "Type": "None",n                                                   |      "Value": "None"n                                                   |    }n                                                   |  ],n                                                   |  "ID": "PAM_000001",n                                                   |  "Mapping": {n                                                   |    "Activity": "Operation",n                                                   |    "Case_ID": "Service ID",n                                                   |    "End_time": "End Date",n                                                   |    "Other_attributes": "true",n                                                   |    "Requester": "None",n                                                   |    "Resource": "Agent",n                                                   |    "Resource_group": "Agent Position",n                                                   |    "Scheduled_end": "None",n                                                   |    "Scheduled_start": "None",n                                                   |    "Start_time": "Start Date"n                                                   |  },n                                                   |  "Name": "CallCenter",n                                                   |  "Organization": "******",n                                                   |  "Schedule": {n                                                   |    "Schedule": "every5min",n                                                   |    "isSchedule": "false"n                                                   |  },n                                                   |  "reference": "121423525253"n                                                   |}").stripMargin
[error]                                                    |}""".stripMargin))
[error]                                                          ^
[error] /Users/*****/Documents/github/*****/src/main/scala/com/*****/labs/orchestrator/api/ProcessMiningRoutes.scala:62:28: expected annotation of type io.swagger.v3.oas.annotations.media.ExampleObject, found <error>
[error]       examples = Array(new ExampleObject(value = """{
[error]                            ^
[error] /Users/*****/Documents/github/*****/src/main/scala/com/tibco/labs/orchestrator/api/ProcessMiningRoutes.scala:60:55: expected annotation of type io.swagger.v3.oas.annotations.media.Content, found <error>
[error]     requestBody = new RequestBody(content = Array(new Content(
[error]                                                       ^
[error] /Users/*****/Documents/github/*****/src/main/scala/com/*****/labs/orchestrator/api/ProcessMiningRoutes.scala:60:23: expected annotation of type io.swagger.v3.oas.annotations.parameters.RequestBody, found <error>
[error]     requestBody = new RequestBody(content = Array(new Content(
[error]                       ^
[error] four errors found
[error] (Compile / compileIncremental) Compilation failed
[error] Total time: 3 s, completed 2 Mar 2021, 12:56:47
 

Но метод удаления .StripMargin работает. Проблема в том, что тогда пример swagger трудно читаем, как

 "n          |{n          |  "schema": [n          |            {n          |                "format": "None",n          |                "ColumnName": "Service ID",n          |                "DataType": "string"n          |            },n          |            {n          |                "format": "None",n          |                "ColumnName": "Operation",n          |                "DataType": "string"n          |            },n          |            {n          |                "format": "None",n          |                "ColumnName": "Agent",n          |                "DataType": "string"n          |            },n          |            {n          |                "format": "None",n          |                "ColumnName": "Service Type",n          |                "DataType": "string"n          |            },n          |            {n          |                "format": "None",n          |                "ColumnName": "Product",n          |                "DataType": "string"n          |            },n          |            {n          |                "format": "None",n          |                "ColumnName": "Customer ID",n          |                "DataType": "string"n          |            },n          |            {n          |                "format": "None",n          |                "ColumnName": "Agent Position",n          |                "DataType": "string"n          |            },n          |            {n          |                "format": "d.M.yy H:m",n          |                "ColumnName": "End Date",n          |                "DataType": "timestamp"n          |            },n          |            {n          |                "format": "d.M.yy H:m",n          |                "ColumnName": "Start Date",n          |                "DataType": "timestamp"n          |            }n          |        ],n          |  "Dataset_Name": "CallCenter",n          |  "Dataset_Description": "CallCenter",n          |  "Dataset_Source": {n          |    "Source": "/services/databases/ORG_01dxjp1rpa35bzcv1kvem9ffyk/CallCenter"n          |  },n          |  "Description": "Call Center analysis",n          |  "Filter": [n          |    {n          |      "Description": "None",n          |      "Name": "None",n          |      "Type": "None",n          |      "Value": "None"n          |    }n          |  ],n          |  "Groups": [n          |    {n          |      "Description": "None",n          |      "Name": "None",n          |      "Type": "None",n          |      "Value": "None"n          |    }n          |  ],n          |  "ID": "PAM_000001",n          |  "Mapping": {n          |    "Activity": "Operation",n          |    "Case_ID": "Service ID",n          |    "End_time": "End Date",n          |    "Other_attributes": "true",n          |    "Requester": "None",n          |    "Resource": "Agent",n          |    "Resource_group": "Agent Position",n          |    "Scheduled_end": "None",n          |    "Scheduled_start": "None",n          |    "Start_time": "Start Date"n          |  },n          |  "Name": "CallCenter",n          |  "Organization": "01dxjp1rpa35bzcv1kvem9ffyk",n          |  "Schedule": {n          |    "Schedule": "every5min",n          |    "isSchedule": "false"n          |  },n          |  "reference": "121423525253"n          |}n          |"
 

я хотел бы сохранить форматирование без изменений для удобства чтения

Какие-либо подсказки?

Ответ №1:

Ну, хорошо звучит, что просто :

   @POST
  @Consumes(Array(MediaType.APPLICATION_JSON))
  @Produces(Array(MediaType.APPLICATION_JSON))
  @Operation(summary = "Creates a spark job with a given config", description = "Creates a spark job with a given config", tags = Array("Spark One time Job"),
    requestBody = new RequestBody(content = Array(new Content(
      schema = new Schema(implementation = classOf[pmConfigLiveApps]),
      examples = Array(new ExampleObject(value = """{
                                                     "schema": [
                                                               {
                                                                   "format": "None",
                                                                   "ColumnName": "Service ID",
                                                                   "DataType": "string"
                                                               },
                                                               {
                                                                   "format": "None",
                                                                   "ColumnName": "Operation",
                                                                   "DataType": "string"
                                                               },
                                                               {
                                                                   "format": "None",
                                                                   "ColumnName": "Agent",
                                                                   "DataType": "string"
                                                               },
                                                               {
                                                                   "format": "None",
                                                                   "ColumnName": "Service Type",
                                                                   "DataType": "string"
                                                               },
                                                               {
                                                                   "format": "None",
                                                                   "ColumnName": "Product",
                                                                   "DataType": "string"
                                                               },
                                                               {
                                                                   "format": "None",
                                                                   "ColumnName": "Customer ID",
                                                                   "DataType": "string"
                                                               },
                                                               {
                                                                   "format": "None",
                                                                   "ColumnName": "Agent Position",
                                                                   "DataType": "string"
                                                               },
                                                               {
                                                                   "format": "d.M.yy H:m",
                                                                   "ColumnName": "End Date",
                                                                   "DataType": "timestamp"
                                                               },
                                                               {
                                                                   "format": "d.M.yy H:m",
                                                                   "ColumnName": "Start Date",
                                                                   "DataType": "timestamp"
                                                               }
                                                           ],
                                                     "Dataset_Name": "CallCenter",
                                                     "Dataset_Description": "CallCenter",
                                                     "Dataset_Source": {
                                                       "Source": "/services/databases/ORG_******/CallCenter"
                                                     },
                                                     "Description": "Call Center analysis",
                                                     "Filter": [
                                                       {
                                                         "Description": "None",
                                                         "Name": "None",
                                                         "Type": "None",
                                                         "Value": "None"
                                                       }
                                                     ],
                                                     "Groups": [
                                                       {
                                                         "Description": "None",
                                                         "Name": "None",
                                                         "Type": "None",
                                                         "Value": "None"
                                                       }
                                                     ],
                                                     "ID": "PAM_000001",
                                                     "Mapping": {
                                                       "Activity": "Operation",
                                                       "Case_ID": "Service ID",
                                                       "End_time": "End Date",
                                                       "Other_attributes": "true",
                                                       "Requester": "None",
                                                       "Resource": "Agent",
                                                       "Resource_group": "Agent Position",
                                                       "Scheduled_end": "None",
                                                       "Scheduled_start": "None",
                                                       "Start_time": "Start Date"
                                                     },
                                                     "Name": "CallCenter",
                                                     "Organization": "*******",
                                                     "Schedule": {
                                                       "Schedule": "every5min",
                                                       "isSchedule": "false"

                                                     },
                                                     "reference": "121423525253"
                                                   }"""))
    ))),
    responses = Array(
      new ApiResponse(responseCode = "200", description = "Add response",
        content = Array(new Content(schema = new Schema(implementation = classOf[ActionPerformed])))),
      new ApiResponse(responseCode = "500", description = "Internal server error",
        content = Array(new Content(schema = new Schema(implementation = classOf[ActionPerformed]))))))
 

делает свое дело