Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG] [Spring] Generated @JsonTypeInfo property value is incorrect for discriminators with underscores #3310

Open
jburgess opened this issue Jul 8, 2019 · 1 comment

Comments

@jburgess
Copy link
Contributor

jburgess commented Jul 8, 2019

Description

Given a specification which contains a discriminator containing an underscore the @JsonTypeInfo property is incorrectly formatted to camel case. For instance a discriminator defined with _type produces the @JsonTypeInfo property type in the super class:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true)

the expected @JsonTypeInfo property is _type:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "_type", visible = true)

This produces an API server definition which is incorrect and not able to evaluate the discriminator to instantiate the correct sub class.

openapi-generator version

4.0.3-SNAPSHOT

OpenAPI declaration file content or url
openapi: 3.0.0
servers:
  - url: https://api.example.com/v1
info:
  version: 0.0.0
  title: test
paths:
  /pet:
    get:
      responses:
        '200':
          description: 'A Pet'
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/Cat'
                  - $ref: '#/components/schemas/Dog'
                discriminator:
                  propertyName: _type
                  mapping:
                    Cat: '#/components/schemas/Cat'
                    Dog: '#/components/schemas/Dog'
components:
  schemas:
    Pet:
      type: object
      required:
        - name
      properties:
        name:
          type: string
        _type:
          type: string
      discriminator:
        propertyName: _type
    Dog:     # "Dog" is a value for the pet_type property (the discriminator value)
      allOf: # Combines the main `Pet` schema with `Dog`-specific properties
        - $ref: '#/components/schemas/Pet'
        - type: object
          # all other properties specific to a `Dog`
          properties:
            bark:
              type: boolean
            breed:
              type: string
              enum: [Dingo, Husky, Retriever, Shepherd]
    Cat:     # "Cat" is a value for the pet_type property (the discriminator value)
      allOf: # Combines the main `Pet` schema with `Cat`-specific properties
        - $ref: '#/components/schemas/Pet'
        - type: object
          # all other properties specific to a `Cat`
          properties:
            hunts:
              type: boolean
            age:
              type: integer
Command line used for generation
openapi-generator-cli generate -g spring
Steps to reproduce

Generate the server stubs with the above API definition.

Related issues/PRs

#1699

@auto-labeler
Copy link

auto-labeler bot commented Jul 8, 2019

👍 Thanks for opening this issue!
🏷 I have applied any labels matching special text in your issue.

The team will review the labels and make any necessary changes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant