question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Problem with enums, `@JsonProperty`, numbers-as-Strings property name

See original GitHub issue

(reported on mailing list)

It appears that use of naming like:

public enum Nums {
   @JsonProperty("1")
    first
    ;
}

does not work as expected, possibly due to number auto-detection for Enum deserialization.

Issue Analytics

  • State:closed
  • Created 6 years ago
  • Comments:7 (3 by maintainers)

github_iconTop GitHub Comments

1reaction
YuriIvanovcommented, May 18, 2017

Thanks for help. First option is not for me. I can’t affect response’e enum values format because it is agreement.

I have implemented this workaround (boilerplate but understandable and working):

public enum ShippingMethods {
    SHIPPING_METHODS_UNSPECIFIED,
    SHIPPING_METHODS_FED_EX_PRIORITY_OVERNIGHT,
    SHIPPING_METHODS_FED_EX_STANDARD_OVERNIGHT,
    SHIPPING_METHODS_FED_EX_FIRST_OVERNIGHT,
    SHIPPING_METHODS_FED_EX_2DAY,
    SHIPPING_METHODS_FED_EX_EXPRESS_SAVER,
    SHIPPING_METHODS_FED_EX_GROUND,
    SHIPPING_METHODS_FED_EX_HOME_DELIVERY,
    SHIPPING_METHODS_FED_EX_1DAY_FREIGHT,
    SHIPPING_METHODS_FED_EX_2DAY_FREIGHT,
    SHIPPING_METHODS_FED_EX_3DAY_FREIGHT,
    SHIPPING_METHODS_FED_EX_INTERNATIONAL_PRIORITY,
    SHIPPING_METHODS_FED_EX_INTERNATIONAL_ECONOMY,
    SHIPPING_METHODS_FED_EX_INTERNATIONAL_FIRST,
    SHIPPING_METHODS_FED_EX_INTERNATIONAL_PRIORITY_FREIGHT,
    SHIPPING_METHODS_FED_EX_INTERNATIONAL_ECONOMY_FREIGHT,
    SHIPPING_METHODS_FED_EX_EUROPE_FIRST_INTERNATIONAL_PRIORITY,
    SHIPPING_METHODS_FED_EX_SMART_POST,
    SHIPPING_METHODS_FED_EX_2DAY_AM,
    SHIPPING_METHODS_FED_EX_FIRST_FREIGHT,
    SHIPPING_METHODS_FED_EX_INTERNATIONAL_GROUND,
    SHIPPING_METHODS_FED_EX_FREIGHT_ECONOMY,
    SHIPPING_METHODS_FED_EX_FREIGHT_PRIORITY,
    SHIPPING_METHODS_UPS_FIRST_CLASS,
    SHIPPING_METHODS_UPS_PRIORITY_MAIL,
    SHIPPING_METHODS_UPS_EXPEDITED_MAIL_INNOVATIONS,
    SHIPPING_METHODS_UPS_PRIORITY_MAIL_INNOVATIONS,
    SHIPPING_METHODS_UPS_ECONOMY_MAIL_INNOVATIONS,
    SHIPPING_METHODS_UPS_NEXT_DAY_AIR,
    SHIPPING_METHODS_UPS_EXPRESS,
    SHIPPING_METHODS_UPS_2ND_DAY_AIR,
    SHIPPING_METHODS_UPS_GROUND,
    SHIPPING_METHODS_UPS_WORLDWIDE_EXPRESS,
    SHIPPING_METHODS_UPS_WORLDWIDE_EXPEDITED,
    SHIPPING_METHODS_UPS_EXPEDITED,
    SHIPPING_METHODS_UPS_STANDARD,
    SHIPPING_METHODS_UPS_3DAY_SELECT,
    SHIPPING_METHODS_UPS_NEXT_DAY_AIR_SAVER,
    SHIPPING_METHODS_UPS_SAVER,
    SHIPPING_METHODS_UPS_NEXT_DAY_AIR_EARLY_AM,
    SHIPPING_METHODS_UPS_EXPRESS_EARLY_AM,
    SHIPPING_METHODS_UPS_WORLDWIDE_EXPRESS_PLUS,
    SHIPPING_METHODS_UPS_EXPRESS_PLUS,
    SHIPPING_METHODS_UPS_2ND_DAY_AIR_AM,
    SHIPPING_METHODS_UPS_TODAY_STANDARD,
    SHIPPING_METHODS_UPS_TODAY_COURIER,
    SHIPPING_METHODS_UPS_TODAY_INTER_CITY,
    SHIPPING_METHODS_TODAY_EXPRESS,
    SHIPPING_METHODS_TODAY_EXPRESS_SAVER,
    SHIPPING_METHODS_UPS_WORLDWIDE_EXPRESS_FREIGHT,
    SHIPPING_METHODS_UPS_SURE_POST_LESS_THAN_1LB,
    SHIPPING_METHODS_UPS_SURE_POST_1LB_OR_GREATER,
    SHIPPING_METHODS_UPS_SURE_POST_BPM,
    SHIPPING_METHODS_UPS_SURE_POST_MEDIA,
    SHIPPING_METHODS_USPS_EXPRESS,
    SHIPPING_METHODS_USPS_FIRST_CLASS,
    SHIPPING_METHODS_USPS_PRIORITY,
    SHIPPING_METHODS_USPS_PARCEL_POST,
    SHIPPING_METHODS_USPS_MEDIA,
    SHIPPING_METHODS_USPS_LIBRARY,
    SHIPPING_METHODS_USPS_ONLINE,
    SHIPPING_METHODS_USPS_GLOBAL_EXPRESS,
    SHIPPING_METHODS_USPS_PARCEL_SELECT,
    SHIPPING_METHODS_USPS_CRITICAL_MAIL,
    SHIPPING_METHODS_USPS_STANDARD_MAIL,
    SHIPPING_METHODS_USPS_EXPRESS_MAIL_INTERNATIONAL,
    SHIPPING_METHODS_USPS_FIRST_CLASS_MAIL_INTERNATIONAL,
    SHIPPING_METHODS_USPS_PRIORITY_MAIL_INTERNATIONAL;

    private static final Map<Integer, ShippingMethods> enumMap = new HashMap<>();
    static {
        enumMap.put(0, SHIPPING_METHODS_UNSPECIFIED);
        enumMap.put(10, SHIPPING_METHODS_FED_EX_PRIORITY_OVERNIGHT);
        enumMap.put(11, SHIPPING_METHODS_FED_EX_STANDARD_OVERNIGHT);
        enumMap.put(12, SHIPPING_METHODS_FED_EX_FIRST_OVERNIGHT);
        enumMap.put(13, SHIPPING_METHODS_FED_EX_2DAY);
        enumMap.put(14, SHIPPING_METHODS_FED_EX_EXPRESS_SAVER);
        enumMap.put(15, SHIPPING_METHODS_FED_EX_GROUND);
        enumMap.put(16, SHIPPING_METHODS_FED_EX_HOME_DELIVERY);
        enumMap.put(17, SHIPPING_METHODS_FED_EX_1DAY_FREIGHT);
        enumMap.put(18, SHIPPING_METHODS_FED_EX_2DAY_FREIGHT);
        enumMap.put(19, SHIPPING_METHODS_FED_EX_3DAY_FREIGHT);
        enumMap.put(20, SHIPPING_METHODS_FED_EX_INTERNATIONAL_PRIORITY);
        enumMap.put(21, SHIPPING_METHODS_FED_EX_INTERNATIONAL_ECONOMY);
        enumMap.put(22, SHIPPING_METHODS_FED_EX_INTERNATIONAL_FIRST);
        enumMap.put(23, SHIPPING_METHODS_FED_EX_INTERNATIONAL_PRIORITY_FREIGHT);
        enumMap.put(24, SHIPPING_METHODS_FED_EX_INTERNATIONAL_ECONOMY_FREIGHT);
        enumMap.put(25, SHIPPING_METHODS_FED_EX_EUROPE_FIRST_INTERNATIONAL_PRIORITY);
        enumMap.put(26, SHIPPING_METHODS_FED_EX_SMART_POST);
        enumMap.put(27, SHIPPING_METHODS_FED_EX_2DAY_AM);
        enumMap.put(28, SHIPPING_METHODS_FED_EX_FIRST_FREIGHT);
        enumMap.put(29, SHIPPING_METHODS_FED_EX_INTERNATIONAL_GROUND);
        enumMap.put(30, SHIPPING_METHODS_FED_EX_FREIGHT_ECONOMY);
        enumMap.put(31, SHIPPING_METHODS_FED_EX_FREIGHT_PRIORITY);
        enumMap.put(35, SHIPPING_METHODS_UPS_FIRST_CLASS);
        enumMap.put(36, SHIPPING_METHODS_UPS_PRIORITY_MAIL);
        enumMap.put(37, SHIPPING_METHODS_UPS_EXPEDITED_MAIL_INNOVATIONS);
        enumMap.put(38, SHIPPING_METHODS_UPS_PRIORITY_MAIL_INNOVATIONS);
        enumMap.put(39, SHIPPING_METHODS_UPS_ECONOMY_MAIL_INNOVATIONS);
        enumMap.put(40, SHIPPING_METHODS_UPS_NEXT_DAY_AIR);
        enumMap.put(41, SHIPPING_METHODS_UPS_EXPRESS);
        enumMap.put(42, SHIPPING_METHODS_UPS_2ND_DAY_AIR);
        enumMap.put(43, SHIPPING_METHODS_UPS_GROUND);
        enumMap.put(44, SHIPPING_METHODS_UPS_WORLDWIDE_EXPRESS);
        enumMap.put(45, SHIPPING_METHODS_UPS_WORLDWIDE_EXPEDITED);
        enumMap.put(46, SHIPPING_METHODS_UPS_EXPEDITED);
        enumMap.put(47, SHIPPING_METHODS_UPS_STANDARD);
        enumMap.put(48, SHIPPING_METHODS_UPS_3DAY_SELECT);
        enumMap.put(49, SHIPPING_METHODS_UPS_NEXT_DAY_AIR_SAVER);
        enumMap.put(50, SHIPPING_METHODS_UPS_SAVER);
        enumMap.put(51, SHIPPING_METHODS_UPS_NEXT_DAY_AIR_EARLY_AM);
        enumMap.put(52, SHIPPING_METHODS_UPS_EXPRESS_EARLY_AM);
        enumMap.put(53, SHIPPING_METHODS_UPS_WORLDWIDE_EXPRESS_PLUS);
        enumMap.put(54, SHIPPING_METHODS_UPS_EXPRESS_PLUS);
        enumMap.put(55, SHIPPING_METHODS_UPS_2ND_DAY_AIR_AM);
        enumMap.put(56, SHIPPING_METHODS_UPS_TODAY_STANDARD);
        enumMap.put(57, SHIPPING_METHODS_UPS_TODAY_COURIER);
        enumMap.put(58, SHIPPING_METHODS_UPS_TODAY_INTER_CITY);
        enumMap.put(59, SHIPPING_METHODS_TODAY_EXPRESS);
        enumMap.put(60, SHIPPING_METHODS_TODAY_EXPRESS_SAVER);
        enumMap.put(61, SHIPPING_METHODS_UPS_WORLDWIDE_EXPRESS_FREIGHT);
        enumMap.put(62, SHIPPING_METHODS_UPS_SURE_POST_LESS_THAN_1LB);
        enumMap.put(63, SHIPPING_METHODS_UPS_SURE_POST_1LB_OR_GREATER);
        enumMap.put(64, SHIPPING_METHODS_UPS_SURE_POST_BPM);
        enumMap.put(65, SHIPPING_METHODS_UPS_SURE_POST_MEDIA);
        enumMap.put(70, SHIPPING_METHODS_USPS_EXPRESS);
        enumMap.put(71, SHIPPING_METHODS_USPS_FIRST_CLASS);
        enumMap.put(72, SHIPPING_METHODS_USPS_PRIORITY);
        enumMap.put(73, SHIPPING_METHODS_USPS_PARCEL_POST);
        enumMap.put(75, SHIPPING_METHODS_USPS_MEDIA);
        enumMap.put(76, SHIPPING_METHODS_USPS_LIBRARY);
        enumMap.put(77, SHIPPING_METHODS_USPS_ONLINE);
        enumMap.put(78, SHIPPING_METHODS_USPS_GLOBAL_EXPRESS);
        enumMap.put(79, SHIPPING_METHODS_USPS_PARCEL_SELECT);
        enumMap.put(80, SHIPPING_METHODS_USPS_CRITICAL_MAIL);
        enumMap.put(81, SHIPPING_METHODS_USPS_STANDARD_MAIL);
        enumMap.put(82, SHIPPING_METHODS_USPS_EXPRESS_MAIL_INTERNATIONAL);
        enumMap.put(83, SHIPPING_METHODS_USPS_FIRST_CLASS_MAIL_INTERNATIONAL);
        enumMap.put(84, SHIPPING_METHODS_USPS_PRIORITY_MAIL_INTERNATIONAL);
    }

    @JsonCreator
    public static ShippingMethods forValue(Integer value) {
        return enumMap.get(value);
    }

    @JsonValue
    public Integer toValue() {
        for (Map.Entry<Integer, ShippingMethods> entry : enumMap.entrySet()) {
            if (entry.getValue() == this)
                return entry.getKey();
        }
        return null; // or fail
    }

When I will have more time i’ll investigate second option with introspection.

0reactions
cowtowncodercommented, Nov 28, 2019

Not 100% sure what could be done here; will close, may be re-filed with specific feature request, improvement idea.

Read more comments on GitHub >

github_iconTop Results From Across the Web

JsonProperty being ignored in enum [duplicate] - Stack Overflow
I have a simple enum that has to properties, OK and FAULT. I am trying to return the value in lowercase when returning...
Read more >
How to correctly serialize/deserialize an enum with custom ...
I have an enum type, and I want to serialize it including the class ... public static SimpleFakeRecordType create(@JsonProperty("name") ...
Read more >
system.text.json not deserializing a newtonsoft.json string
As what Llama said I was using the wrong attribute for the Serializer that I'm using when I switched [JsonPropertyName] to [JsonProperty] from...
Read more >
API design and usability | Documenting APIs
The first issue is that tech writers are often too far downstream to ... the guide notes that “JSON property names SHOULD be...
Read more >
Enum JsonProperty.Access - Adobe Developer
Note that while this annotation modifies access to annotated property, its effects may be further overridden by JsonIgnore property: if both annotations are ......
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found