Ok. I think I have an idea of the problem (a minimal unit test would have been even simpler way but this works too). Could you file an issue for `jackson-databind` please? I suspect this is related to auto-detection of JSON Strings that look like numbers, accidentally using ordinal() like you suggest. But I need to reproduce it, and it may take a while to find time to work on this.
-+ Tatu +- On Tue, May 16, 2017 at 12:47 AM, yurivan <[email protected]> wrote: > 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. -- 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.
