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

feat(client): update jackson client generation to always annotate all fields #1976

Conversation

SalyczeQ
Copy link
Contributor

@SalyczeQ SalyczeQ commented Jun 7, 2024

📝 Description

Update Jackson client generation logic to always annotate all fields with @get:JsonProperty.
This is a workaround to Jackson limitations due to its reliance on reflections to find getters/setters following JavaBean naming conventions.

Simple mutation:

mutation CreateIssuedInvoice($input: IssuedInvoiceInput!) {
    CreateIssuedInvoice(IssuedInvoice: $input) {
        ID
        Stav
        CisloDokladu
    }
}

Genarated before change:

public const val CREATE_ISSUED_INVOICE: String =
    "mutation CreateIssuedInvoice(${'$'}input: IssuedInvoiceInput!) {\n    CreateIssuedInvoice(IssuedInvoice: ${'$'}input) {\n        ID\n        Stav\n        CisloDokladu\n    }\n}"

@Generated
public class CreateIssuedInvoice(
  override val variables: CreateIssuedInvoice.Variables,
) : GraphQLClientRequest<CreateIssuedInvoice.Result> {
  override val query: String = CREATE_ISSUED_INVOICE

  override val operationName: String = "CreateIssuedInvoice"

  override fun responseType(): KClass<CreateIssuedInvoice.Result> =
      CreateIssuedInvoice.Result::class

  @Generated
  public data class Variables(
    @get:JsonProperty(value = "input")
    public val input: IssuedInvoiceInput,
  )

  /**
   * Dotazy pro zápis, editaci a mazání S5 objektů
   */
  @Generated
  public data class Result(
    /**
     * Faktura vydaná (zápis)
     */
    public val CreateIssuedInvoice: IssuedInvoice? = null,
  )
}

Genareted after change:

public const val CREATE_ISSUED_INVOICE: String =
    "mutation CreateIssuedInvoice(${'$'}input: IssuedInvoiceInput!) {\n    CreateIssuedInvoice(IssuedInvoice: ${'$'}input) {\n        ID\n        Stav\n        CisloDokladu\n    }\n}"

@Generated
public class CreateIssuedInvoice(
  override val variables: CreateIssuedInvoice.Variables,
) : GraphQLClientRequest<CreateIssuedInvoice.Result> {
  override val query: String = CREATE_ISSUED_INVOICE

  override val operationName: String = "CreateIssuedInvoice"

  override fun responseType(): KClass<CreateIssuedInvoice.Result> =
      CreateIssuedInvoice.Result::class

  @Generated
  public data class Variables(
    @get:JsonProperty(value = "input")
    public val input: IssuedInvoiceInput,
  )

  /**
   * Dotazy pro zápis, editaci a mazání S5 objektů
   */
  @Generated
  public data class Result(
    /**
     * Faktura vydaná (zápis)
     */
    @get:JsonProperty("CreateIssuedInvoice")
    public val CreateIssuedInvoice: IssuedInvoice? = null,
  )
}

data class IssuedInvoice before change:

@Generated
public data class IssuedInvoice(
  /**
   * ID
   */
  @JsonSerialize(converter = UUIDToAnyConverter::class)
  @JsonDeserialize(converter = AnyToUUIDConverter::class)
  public val ID: UUID? = null,
  /**
   * Stav
   */
  public val Stav: Int? = null,
  /**
   * Číslo dokladu
   */
  public val CisloDokladu: String? = null,
)

data class IssuedInvoice after change:

@Generated
public data class IssuedInvoice(
  /**
   * ID
   */
  @JsonSerialize(converter = UUIDToAnyConverter::class)
  @JsonDeserialize(converter = AnyToUUIDConverter::class)
  @get:JsonProperty("ID")
  public val ID: UUID? = null,
  /**
   * Stav
   */
  @get:JsonProperty("Stav")
  public val Stav: Int? = null,
  /**
   * Číslo dokladu
   */
  @get:JsonProperty("CisloDokladu")
  public val CisloDokladu: String? = null,
)

🔗 Related Issues

https://kotlinlang.slack.com/archives/CQLNT7B29/p1717655752084109

@SalyczeQ SalyczeQ force-pushed the feat/update-jackson-client-generation-to-always-annotate-all-fields branch from 6500334 to b277c9b Compare June 7, 2024 09:34
@SalyczeQ SalyczeQ marked this pull request as ready for review June 7, 2024 09:35
@SalyczeQ SalyczeQ changed the title Feat/update jackson client generation to always annotate all fields feat(client): update jackson client generation to always annotate all fields Jun 7, 2024
@Samjin Samjin requested a review from dariuszkuc June 7, 2024 20:24
@dariuszkuc dariuszkuc added changes: minor Changes require a minor version module: client Issue affects the client code labels Jun 13, 2024
@dariuszkuc dariuszkuc merged commit 60879c5 into ExpediaGroup:master Jun 13, 2024
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
changes: minor Changes require a minor version module: client Issue affects the client code
Development

Successfully merging this pull request may close these issues.

2 participants