OpenAPITools / openapi-generator

OpenAPI Generator allows generation of API client libraries (SDK generation), server stubs, documentation and configuration automatically given an OpenAPI Spec (v2, v3)
https://openapi-generator.tech
Apache License 2.0
20.54k stars 6.27k forks source link

[REQ] Add x-field-extra-annotation for "kotlin" generator #17544

Open alex-semenk opened 5 months ago

alex-semenk commented 5 months ago

Is your feature request related to a problem? Please describe.

Currently java generator (as well as some other generators) has x-field-extra-annotation feature, which allows to annotate Java fileds for any model class, generated from openapi spec. You can find description of x-field-extra-annotation property in openapi-generator docs https://openapi-generator.tech/docs/generators/java/ Currently kotlin generator doesn't support this feature as you can find in docs https://openapi-generator.tech/docs/generators/kotlin/

Describe the solution you'd like

The request is to add support for x-field-extra-annotation feature for "kotlin" generator. So kotlin models can be generated with additional field annotations. This is especially vital when you need to provide custom span>@</spanJsonSerialize or JsonDeserialize annotation to deserialize or serialize model correctly. Currently I didn't found any workaround to provide custom JsonSerialize/JsonDeserialize annotations for model fields.

Describe alternatives you've considered

The only alternative solution I can see so far is to define customized template for kotlin model generator, to manually add support for x-field-extra-annotation attribute.

Additional context

Here is an example of openapi spec and expected generated model

OpenAPI spec:

Account:
  type: "object"
  required:
    - "name"
    - "assets"
  properties:
    name:
      type: "string"
    assets:
      type: "object"
      additionalProperties:
        type: "string"
      x-field-extra-annotation: "@JsonDeserialize(converter = AssetConverter::class)"

Generated Model:

data class Account (

    @field:JsonProperty("name")
    val name: kotlin.String,

    @field:JsonProperty("assets")
    @JsonDeserialize(converter = AssetConverter::class)
    val assets: Map<String, String>
)
wing328 commented 5 months ago

@alex-semenk thanks for the suggestion. May I know if you've time to contribute a PR for that?

alex-semenk commented 5 months ago

@wing328 Sure, I think I might find some time a little later to add the feature. I will let you know when I will have some progress on this.

Oleksii-Hovderchak commented 4 months ago

Hello, is it planned? I see it's available in the documentation: https://openapi-generator.tech/docs/generators/java/ but adding class or field level configs has zero effect

alex-semenk commented 4 months ago

Hi @Oleksii-Hovderchak the documentation you provided is for "java" generator, however current issue is open for "kotlin" generator. For which generator are you missing "x-field-extra-annotation" feature?

Fitpet-Jake commented 4 months ago

Does not support kotlin generator "x-field-extra-annotation"?

aldex32 commented 1 month ago

unfortunately kotlin is lagging behind :-(

alarv commented 3 weeks ago

+1