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.