본문 바로가기

Programming!

Json 속성중 Enum에 대한 Null 처리

일반적인 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;

    }

....