일반적인 null이나 알 수 없는 속성의 경우는
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class RateInfo {
...
위 Annotation 정도면 무난하게 파싱이 가능하지만, Enum이 추가되고 해당 Enum이 Null 또는 Enum에 매칭되는 속성이 아닌 경우는 오류가 발생하게 된다.
가령 Json과 Object가 아래와 같은 경우 "Unknown"이 없으므로 오류(deserialization error)이다.
Json
},
"nonRefundable": false,
"rateType": "Unknown"
}
},
Object
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class RateInfo {
...
@JsonProperty(value="rateType")
private MerchantRateType rateType;
MerchantRateType
public enum MerchantRateType {
MerchantPackage("MerchantPackage"), MerchantStandard("MerchantStandard");
}
이경우는 Enum에 Json에 대한 처리를 직접 해주는게 좋다. ( @JsonCreator )
public enum MerchantRateType {
....
@JsonCreator
public static MerchantRateType forValue(String value) {
return Arrays.stream(MerchantRateType.values()).filter(o -> o.getRateTypeName().equals(value)).findFirst().orElse(null);
}
@JsonValue
public String toValue() {
return rateTypeName;
}
....