How to use a Swagger type discriminator with Kotlin data classes?

I have an API reponse which contains a list of objects, each of which can be of a different type. These are defined as Data Classes:

@Schema(type = "object",
        title = "Activity",
        subTypes = (Run::class, Swim::class),
        discriminatorProperty = "objectType")
interface Activity;

@Schema(title = "Run")
data class Run(val distance: Int, val type: String = "Run") : Activity

@Schema(title = "Swim")
data class Swim(val river: String, val type: String = "Swim") : Activity

I will eventually have a large number of these, maybe 50, so I want to find a lower-boilerplate, easy-maintenance solution.

I’m stuck in a circular problem:

  1. I can’t seem to use the type discriminator without including a type name in each object.
  2. I can include the type name in every object’s constructor as a default, but it’s not safe because it could be changed when the object is constructed.
  3. But if I make the field somehow un-settable, then I can’t construct the object based on an API request.

Is it possible to add these automatically? I asssume I could do something custom with Jackson annotations but my situation seems pretty mainstream. Did I miss something?

The fact that I have to mention each type name four times in the source file makes me think there’s a better solution.

I’m using Springdoc OpenAPI and OpenAPI spec 3.0.1