ジャクソンは、列挙型に空の文字列値を変換することはできません

crishushu:

私は、逆シリアル化中に/前の文字列値を空に向いてフィールドをフィルタリングするためにジャクソン(2.8)で便利なソリューションを探しています:

@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class Guis {

public enum Context {
    SDS,
    NAVIGATION
}

public enum Layer {
    Library,
    Status,
    Drivingdata
}

// client code

 String s = "{\"context\":\"\",\"layer\":\"Drivingdata\"}";
 ObjectMapper mapper = new ObjectMapper();
 Guis o = mapper.readValue(s, Guis.class);

エラー

 Exception in thread "main" com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not deserialize value of type cq.speech.rsi.api.Guis$Context from String "": value not one of declared Enum instance names: [SDS NAVIGATION] at [Source: {"context":"","layer":"Drivingdata"}; line: 1, column: 12] (through reference chain: cq.speech.rsi.api.Guis["context"])

他に何私はああ、この1 ...試してみました

mapper.getDeserializationConfig().with(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);

エラー遺跡と明らかにしても周りグーグルではあまり役に立ちませんでした...

EDIT

上記例示したようなセットDeserializationFeatureは動作しません。私のためのソリューションは、このスニペットを追加して、最終的でした。

 mapper.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true)
Amithクマール:

あなたは、有効にすることができDeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL、あなたのマッパー、デフォルトでは無効になってそのため。これを使用する唯一の注意点は、列挙型にnullとして空の文字列を含むすべての不明を扱います。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=171526&siteId=1