-
Notifications
You must be signed in to change notification settings - Fork 6k
Open
Description
Description
pr 4085 creates Jackson annotations that use the name of the model. In some cases, it is not desired to use the model name in the annotation because the name specified there is used in the json payload.
Swagger-codegen version
2.2.2-SNAPSHOT
Swagger declaration file content or url
definitions:
BaseObj:
type: object
discriminator: object_type
required:
- id
- object_type
properties:
id:
type: integer
format: int64
object_type:
type: string
readOnly: true
SubObjType:
type: string
enum:
- daily
- monthly
- quarterly
- yearly
SubObj:
allOf:
- $ref: '#/definitions/BaseObj'
- type: object
discriminator: sub_obj_type
required:
- sub_obj_type
properties:
sub_obj_type:
$ref: '#/definitions/SubObjType'
name:
type: string
DailySubObj:
allOf:
- $ref: '#/definitions/SubObj'
- type: object
properties:
day_of_month:
type: integer
format: int32
Related issues
Suggest a Fix
Currently (with pr 4226), with the Java language, this will generate the following annotations for BaseObj and SubObj.
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "object_type")
@JsonSubTypes({ @Type(value = SubObj.class, name = "SubObj") })
public class BaseObj {
}
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "sub_obj_type")
@JsonSubTypes({ @Type(value = DailySubObj.class, name = "DailySubObj") })
public class SubObj {
}
In order to allow for a customized name in the @Type annotation, I suggest providing a vendor extension that can be used to specify the value.
This would allow for the following annotations to be generated instead. I suggest "x-discriminator-value" as the name of the vendor extension.
Here is an example of the spec from above with the vendor extension and the code that would be generated.
definitions:
BaseObj:
type: object
discriminator: object_type
required:
- id
- object_type
properties:
id:
type: integer
format: int64
object_type:
type: string
readOnly: true
SubObjType:
type: string
enum:
- daily
- monthly
- quarterly
- yearly
SubObj:
x-discriminator-value: sub-obj
allOf:
- $ref: '#/definitions/BaseObj'
- type: object
discriminator: sub_obj_type
required:
- sub_obj_type
properties:
sub_obj_type:
$ref: '#/definitions/SubObjType'
name:
type: string
DailySubObj:
x-discriminator-value: daily
allOf:
- $ref: '#/definitions/SubObj'
- type: object
properties:
day_of_month:
type: integer
format: int32
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "object_type")
@JsonSubTypes({ @Type(value = SubObj.class, name = "sub-obj") })
public class BaseObj {
}
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "sub_obj_type")
@JsonSubTypes({ @Type(value = DailySubObj.class, name = "daily") })
public class SubObj {
}
Metadata
Metadata
Assignees
Labels
No labels