Object mapper configuration:
private final objectMapper =                 
                new ObjectMapper()
                        
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
                        
.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true)
                        
.setSerializationInclusion(JsonInclude.Include.NON_NULL)
                        .enable(SerializationFeature.INDENT_OUTPUT);
objectMapper.registerModule(javaTimeModule);

Full enum:
public enum ShippingMethods {
    @JsonProperty("0")
    SHIPPING_METHODS_UNSPECIFIED(0),

    @JsonProperty("10")
    SHIPPING_METHODS_FED_EX_PRIORITY_OVERNIGHT(10),

    @JsonProperty("11")
    SHIPPING_METHODS_FED_EX_STANDARD_OVERNIGHT(11),

    @JsonProperty("12")
    SHIPPING_METHODS_FED_EX_FIRST_OVERNIGHT(12),

    @JsonProperty("13")
    SHIPPING_METHODS_FED_EX_2DAY(13),

    @JsonProperty("14")
    SHIPPING_METHODS_FED_EX_EXPRESS_SAVER(14),

    @JsonProperty("15")
    SHIPPING_METHODS_FED_EX_GROUND(15),

    @JsonProperty("16")
    SHIPPING_METHODS_FED_EX_HOME_DELIVERY(16),

    @JsonProperty("17")
    SHIPPING_METHODS_FED_EX_1DAY_FREIGHT(17),

    @JsonProperty("18")
    SHIPPING_METHODS_FED_EX_2DAY_FREIGHT(18),

    @JsonProperty("19")
    SHIPPING_METHODS_FED_EX_3DAY_FREIGHT(19),

    @JsonProperty("20")
    SHIPPING_METHODS_FED_EX_INTERNATIONAL_PRIORITY(20),

    @JsonProperty("21")
    SHIPPING_METHODS_FED_EX_INTERNATIONAL_ECONOMY(21),

    @JsonProperty("22")
    SHIPPING_METHODS_FED_EX_INTERNATIONAL_FIRST(22),

    @JsonProperty("23")
    SHIPPING_METHODS_FED_EX_INTERNATIONAL_PRIORITY_FREIGHT(23),

    @JsonProperty("24")
    SHIPPING_METHODS_FED_EX_INTERNATIONAL_ECONOMY_FREIGHT(24),

    @JsonProperty("25")
    SHIPPING_METHODS_FED_EX_EUROPE_FIRST_INTERNATIONAL_PRIORITY(25),

    @JsonProperty("26")
    SHIPPING_METHODS_FED_EX_SMART_POST(26),

    @JsonProperty("27")
    SHIPPING_METHODS_FED_EX_2DAY_AM(27),

    @JsonProperty("28")
    SHIPPING_METHODS_FED_EX_FIRST_FREIGHT(28),

    @JsonProperty("29")
    SHIPPING_METHODS_FED_EX_INTERNATIONAL_GROUND(29),

    @JsonProperty("30")
    SHIPPING_METHODS_FED_EX_FREIGHT_ECONOMY(30),

    @JsonProperty("31")
    SHIPPING_METHODS_FED_EX_FREIGHT_PRIORITY(31),

    @JsonProperty("35")
    SHIPPING_METHODS_UPS_FIRST_CLASS(35),

    @JsonProperty("36")
    SHIPPING_METHODS_UPS_PRIORITY_MAIL(36),

    @JsonProperty("37")
    SHIPPING_METHODS_UPS_EXPEDITED_MAIL_INNOVATIONS(37),

    @JsonProperty("38")
    SHIPPING_METHODS_UPS_PRIORITY_MAIL_INNOVATIONS(38),

    @JsonProperty("39")
    SHIPPING_METHODS_UPS_ECONOMY_MAIL_INNOVATIONS(39),

    @JsonProperty("40")
    SHIPPING_METHODS_UPS_NEXT_DAY_AIR(40),

    @JsonProperty("41")
    SHIPPING_METHODS_UPS_EXPRESS(41),

    @JsonProperty("42")
    SHIPPING_METHODS_UPS_2ND_DAY_AIR(42),

    @JsonProperty("43")
    SHIPPING_METHODS_UPS_GROUND(43),

    @JsonProperty("44")
    SHIPPING_METHODS_UPS_WORLDWIDE_EXPRESS(44),

    @JsonProperty("45")
    SHIPPING_METHODS_UPS_WORLDWIDE_EXPEDITED(45),

    @JsonProperty("46")
    SHIPPING_METHODS_UPS_EXPEDITED(46),

    @JsonProperty("47")
    SHIPPING_METHODS_UPS_STANDARD(47),

    @JsonProperty("48")
    SHIPPING_METHODS_UPS_3DAY_SELECT(48),

    @JsonProperty("49")
    SHIPPING_METHODS_UPS_NEXT_DAY_AIR_SAVER(49),

    @JsonProperty("50")
    SHIPPING_METHODS_UPS_SAVER(50),

    @JsonProperty("51")
    SHIPPING_METHODS_UPS_NEXT_DAY_AIR_EARLY_AM(51),

    @JsonProperty("52")
    SHIPPING_METHODS_UPS_EXPRESS_EARLY_AM(52),

    @JsonProperty("53")
    SHIPPING_METHODS_UPS_WORLDWIDE_EXPRESS_PLUS(53),

    @JsonProperty("54")
    SHIPPING_METHODS_UPS_EXPRESS_PLUS(54),

    @JsonProperty("55")
    SHIPPING_METHODS_UPS_2ND_DAY_AIR_AM(55),

    @JsonProperty("56")
    SHIPPING_METHODS_UPS_TODAY_STANDARD(56),

    @JsonProperty("57")
    SHIPPING_METHODS_UPS_TODAY_COURIER(57),

    @JsonProperty("58")
    SHIPPING_METHODS_UPS_TODAY_INTER_CITY(58),

    @JsonProperty("59")
    SHIPPING_METHODS_TODAY_EXPRESS(59),

    @JsonProperty("60")
    SHIPPING_METHODS_TODAY_EXPRESS_SAVER(60),

    @JsonProperty("61")
    SHIPPING_METHODS_UPS_WORLDWIDE_EXPRESS_FREIGHT(61),

    @JsonProperty("62")
    SHIPPING_METHODS_UPS_SURE_POST_LESS_THAN_1LB(62),

    @JsonProperty("63")
    SHIPPING_METHODS_UPS_SURE_POST_1LB_OR_GREATER(63),

    @JsonProperty("64")
    SHIPPING_METHODS_UPS_SURE_POST_BPM(64),

    @JsonProperty("65")
    SHIPPING_METHODS_UPS_SURE_POST_MEDIA(65),

    @JsonProperty("70")
    SHIPPING_METHODS_USPS_EXPRESS(70),

    @JsonProperty("71")
    SHIPPING_METHODS_USPS_FIRST_CLASS(71),

    @JsonProperty("72")
    SHIPPING_METHODS_USPS_PRIORITY(72),

    @JsonProperty("73")
    SHIPPING_METHODS_USPS_PARCEL_POST(73),

    @JsonProperty("75")
    SHIPPING_METHODS_USPS_MEDIA(75),

    @JsonProperty("76")
    SHIPPING_METHODS_USPS_LIBRARY(76),

    @JsonProperty("77")
    SHIPPING_METHODS_USPS_ONLINE(77),

    @JsonProperty("78")
    SHIPPING_METHODS_USPS_GLOBAL_EXPRESS(78),

    @JsonProperty("79")
    SHIPPING_METHODS_USPS_PARCEL_SELECT(79),

    @JsonProperty("80")
    SHIPPING_METHODS_USPS_CRITICAL_MAIL(80),

    @JsonProperty("81")
    SHIPPING_METHODS_USPS_STANDARD_MAIL(81),

    @JsonProperty("82")
    SHIPPING_METHODS_USPS_EXPRESS_MAIL_INTERNATIONAL(82),

    @JsonProperty("83")
    SHIPPING_METHODS_USPS_FIRST_CLASS_MAIL_INTERNATIONAL(83),

    @JsonProperty("84")
    SHIPPING_METHODS_USPS_PRIORITY_MAIL_INTERNATIONAL(84);

    private final int shippingMethodId;

    ShippingMethods(final int shippingMethodId) {
        this.shippingMethodId = shippingMethodId;
    }

    public int getShippingMethodId() {
        return shippingMethodId;
    }
}

As you can see it is sparse enum.

Object that uses this enum:
public class ShippingMethodInfo {
    @JsonProperty("typeId")
    private ShippingProviders typeId;

    @JsonProperty("value")
    private ShippingMethods value;

    @JsonProperty("coverage")
    private ShippingCoverage coverage;

    @JsonProperty("label")
    private String label;

    public ShippingProviders getTypeId() {
        return typeId;
    }

    public void setTypeId(ShippingProviders typeId) {
        this.typeId = typeId;
    }

    public ShippingMethods getValue() {
        return value;
    }

    public void setValue(ShippingMethods value) {
        this.value = value;
    }

    public ShippingCoverage getCoverage() {
        return coverage;
    }

    public void setCoverage(ShippingCoverage coverage) {
        this.coverage = coverage;
    }

    public String getLabel() {
        return label;
    }

    public void setLabel(String label) {
        this.label = label;
    }
}


A significant part of the raw API response:
{
    "d": [
        {
            "typeId": 0,
            "value": 17,
            "coverage": 1,
            "label": "FedEx 1 Day Freight®"
        },
        {
            "typeId": 0,
            "value": 27,
            "coverage": 1,
            "label": "FedEx 2 Day AM®"
        },

Result of deserialization of first object:
typeId = "SHIPPING_PROVIDERS_FED_EX"
value = "SHIPPING_METHODS_FED_EX_SMART_POST"
coverage = "SHIPPING_COVERAGE_DOMESTIC"
label = "FedEx 1 Day Freight®"

Result of deserialization of second object:
typeId = "SHIPPING_PROVIDERS_FED_EX"
value = "SHIPPING_METHODS_UPS_ECONOMY_MAIL_INNOVATIONS"
coverage = "SHIPPING_COVERAGE_DOMESTIC"
label = "FedEx 2 Day AM®"

typeId, coverage and label were deserialized correctly, but value was not.

As you can see that value 17 is
    @JsonProperty("17")
    SHIPPING_METHODS_FED_EX_1DAY_FREIGHT(17)
and should have been deserialized as SHIPPING_METHODS_FED_EX_1DAY_FREIGHT

Instead it was deserialized as 
    @JsonProperty("26")
    SHIPPING_METHODS_FED_EX_SMART_POST(26)

SHIPPING_METHODS_FED_EX_SMART_POST has ordinal() value 17. That's why it 
was deserialized this way i think.
The same situation with second object desirialization.

With serialization of enum values there is no problems.

I've also implemnted approach with @JsonCreator - @JsonValue and it works 
correctly in both directions.

If you need more info just ask.

-- 
You received this message because you are subscribed to the Google Groups 
"jackson-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to