Ktor-OpenAPI-Generator icon indicating copy to clipboard operation
Ktor-OpenAPI-Generator copied to clipboard

@Description annotation doesn't work

Open greekZorba opened this issue 3 years ago • 3 comments

I am trying to use @Description to my schema model.

my version is 0.3-beta.2

But nothing happen to my schema model.

Am I using @Description annotation incorrectly? Or @Description is working improperly?

this is my code as shown below.

can I get any advice?

  fun NormalOpenAPIRoute.regionSpec() {
  
          route("/api/regions") {
              get<Unit, RegionResponse>(
                  info("show regions")
              ) {
                  respond(RegionResponse.of("seoul", 1, "seoul city"))
              }        
  }
      @Response("Region")
      data class RegionResponse(
          @Description("city") val sido: String,
          @Description("region id") val regionId: Int,
          @Description("region name") val region: String
      ) : Serializable {
          companion object {
              fun of(sido: String, regionId: Int, region: String) =
                  RegionResponse(sido = sido, regionId = regionId, region = region)
          }
      }
    "components" : {
        "schemas" : {
          "RegionResponse" : {
            "nullable" : false,
            "properties" : {
              "region" : {
                "nullable" : false,
                "type" : "string"
              },
              "regionId" : {
                "format" : "int32",
                "nullable" : false,
                "type" : "integer"
              },
              "sido" : {
                "nullable" : false,
                "type" : "string"
              }
            },
            "required" : [ "region", "regionId", "sido" ],
            "type" : "object"
          }
       }
    }

greekZorba avatar Jan 20 '22 13:01 greekZorba

It should work, maybe you can try to annotate the type instead. I'll look into it when i have a bit of time

Wicpar avatar Feb 27 '22 22:02 Wicpar

Any chance you've taken a look at this @Wicpar? Seeing same behavior.

craigberry1 avatar Aug 26 '22 02:08 craigberry1

I'm not fully aware yet why, but the reason it's not working is that you can't get by with just adding the annotation. You need to explicitly annotate it as: @property:Description, which will make the code pick it up properly. This wasn't an issue before as the only target set was property. This was changed where it's now applicable to both property and a value parameter.

Perhaps whoever is more aware of the inner workings of Kotlin reflection can shed some more light on why this is the case. I've yet to grasp it 100%.

EDIT: it is explained here https://kotlinlang.org/docs/annotations.html#annotation-use-site-targets

janhaesen avatar Dec 27 '22 22:12 janhaesen