Skip to content

Why JacksonModule ignores JsonProperty annotations on enum members if at least one enum member does not have it? #540

@estroykov

Description

@estroykov

Hey, thanks for the great lib with good extension points!

I am having the following enum class:

public static enum Day {
   @JsonProperty("1")
   DAY_1,

   @JsonProperty("2")
   DAY_2,

   ...

   END;
}

So, not all enum members have @JsonProperty annotations and in this case it seems to be natural, because it's not possible to define enum member called 1, but it does not make much sense to put @JsonProperty("END") for END.

Then I use JacksonModule to generate a schema. If I had @JsonProperty annotation on END as well, then the schema would have been generated as follows:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "r": {
      "type": "string",
      "enum": [
        "1",
        "2",
        "END"
      ]
    }
  },
  "required": [
    "r"
  ]
}

And this is fine. But if END does not have annotation, then the generated schema is:

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "r": {
      "type": "string",
      "enum": [
        "DAY_1",
        "DAY_2",
        "END"
      ]
    }
  },
  "required": [
    "r"
  ]
}

However, I would expect 1 and 2 instead of DAY_1 and DAY_2.

Looks like this is intended, see CustomEnumDefinitionProvider.getSerializedValuesFromJsonProperty(), which says explicitly that even at least one enum member does not have @JsonProperty annotation, then annotations on all other members are ignored.

In my case, I cannot modify the class, so in my case the only workaround is to add a custom module. But I am still wondering, why this case is not covered by JacksonModule.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions