Hi, I have opened the issue - https://github.com/FasterXML/jackson-databind/issues/1859 for this. Please let me know when you have the fix available.
Thanks, Remya On Tuesday, 12 December 2017 23:45:01 UTC-6, Remya wrote: > > > Thanks much! > > I would post this as an issue. > > Regards, > Remya > > On Tuesday, 12 December 2017 17:03:47 UTC-6, Tatu Saloranta wrote: >> >> On Tue, Dec 12, 2017 at 8:11 AM, Remya <[email protected]> wrote: >> > Hi, >> > >> > As I mentioned in one of my earlier responses, had also tried adding >> this >> > configuration - >> > >> objectMapper.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, >> >> >> > true); >> > >> > This resulted in the Unknown attribute KEY to be deserialized as >> "null". >> > (i.e., instead of Test=No, it gets deserialized as null=No) >> > >> > My intention is to ignore this attribute completely during >> deserialization. >> > Please let me know if that would be possible by any means. >> > >> > Meanwhile, would try READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE >> >> Ah. The challenge here is that it is not an Enum-valued property, but >> EnumMap (or, equivalently, EnumSet) valued >> property, meaning that deserializer for the Map would need to be aware >> of the special handling. >> And for general Maps there just isn't any way to declare that there >> are invalid entries that are to be ignored -- >> invalid entries are typicallt hard failures. >> >> However, it seems like a reasonable improvement idea to allow >> specialized handling, since I think there is >> a dedicated serializer (due to special requirements for constructing >> EnumMap). >> >> Could you file am issue for `jackson-databind` for requesting handling >> of unknown/unmapped Enum keys, >> wrt `DeserializationFeature`s discussed here? >> To me it seems reasonable that "as null" would result in "ignore" >> (many Map types do not allow `null` keys, >> specifically EnumMap doesn't). This could even be implemented in a >> patch for 2.9 (if I have time) since it >> does not require API changes. >> >> -+ Tatu +- >> >> >> > >> > Thanks! >> > >> > On Monday, 11 December 2017 23:35:52 UTC-6, Tatu Saloranta wrote: >> >> >> >> On Mon, Dec 11, 2017 at 8:37 PM, Remya <[email protected]> wrote: >> >> > >> >> > Thanks for the response. >> >> > >> >> > That was just a sample that I posted. The cases do match and yes, my >> >> > requirement is when a new attribute - say, 'Test' comes in the Json, >> I >> >> > want >> >> > the mapper to ignore that field and proceed with de-serializing the >> >> > remaining fields that has a match in the Enum, rather than throwing >> the >> >> > exception. >> >> > >> >> > What should I do, so that it ignores the attributes which does not >> have >> >> > an >> >> > entry in the Enum? >> >> >> >> You probably want to enable one of following >> `DeserializationFeature`s: >> >> >> >> * `READ_UNKNOWN_ENUM_VALUES_AS_NULL` >> >> * `READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE` (uses Enum value >> >> annotated with >> `com.fasterxml.jackson.annotation.JsonEnumDefaultValue`) >> >> >> >> -+ Tatu +- >> >> >> >> > >> >> > Regards, >> >> > Remya >> >> > >> >> > On Monday, 11 December 2017 22:21:32 UTC-6, Tatu Saloranta wrote: >> >> >> >> >> >> In this case enum names do not match wrt casing? ("count" key, but >> enum >> >> >> `Count`; nor is there enum `Test` defined) >> >> >> So it seems to me exception is due to simple mismatch between keys >> >> >> used, >> >> >> names of Enums. >> >> >> >> >> >> -+ Tatu +- >> >> >> >> >> >> >> >> >> On Mon, Dec 11, 2017 at 7:03 PM, Remya <[email protected]> wrote: >> >> >>> >> >> >>> >> >> >>> Sample of JSON String would look like this. >> >> >>> >> >> >>> String >> >> >>> >> >> >>> >> jsonText="{\"cartId\":\"31028\",\"userId\":\"106784\",\"attributes\":{\"count\":\"1\",\"amount\":\"10\",\"email\":\"N\",\"Test\":\"No\",\"phone\":\"N\"}}"; >> >> >> >> >>> >> >> >>> The JSON maps to a Cart class, which holds these attributes as a >> Map. >> >> >>> >> >> >>> public class Cart { >> >> >>> >> >> >>> private String cartId; >> >> >>> private String userId; >> >> >>> private Map<Attributes,String> attributes; >> >> >>> >> >> >>> } >> >> >>> >> >> >>> Attributes map to the Enum, as given below. >> >> >>> >> >> >>> public enum Attributes { >> >> >>> Count(0), >> >> >>> Amount(1), >> >> >>> Email(2), >> >> >>> Phone(3); >> >> >>> >> >> >>> private final int value; >> >> >>> >> >> >>> private Attributes(int value) { >> >> >>> this.value = value; >> >> >>> } >> >> >>> >> >> >>> public int getValue() { >> >> >>> return value; >> >> >>> } >> >> >>> >> >> >>> public static Attributes findByValue(int value) { >> >> >>> switch (value) { >> >> >>> case 0: >> >> >>> return Count; >> >> >>> case 1: >> >> >>> return Amount; >> >> >>> case 2: >> >> >>> return Email; >> >> >>> case 3: >> >> >>> return Phone; >> >> >>> default: >> >> >>> return null; >> >> >>> } >> >> >>> } >> >> >>> } >> >> >>> >> >> >>> Thanks! >> >> >>> >> >> >>> On Monday, 11 December 2017 17:37:34 UTC-6, Tatu Saloranta wrote: >> >> >>>> >> >> >>>> Ok, so .... what are classes involved? And input JSON? >> >> >>>> >> >> >>>> -+ Tatu +- >> >> >>>> >> >> >>>> On Mon, Dec 11, 2017 at 1:50 PM, Remya <[email protected]> wrote: >> >> >>>>> >> >> >>>>> I am trying to deserialize a JSON string using jackson-databind >> >> >>>>> Objectmapper which has a set of Enum attributes within it. >> >> >>>>> >> >> >>>>> >> >> >>>>> This happens when an unknown attribute, which is not defined in >> the >> >> >>>>> enum comes in the JSON. Please find below the object mapper >> >> >>>>> configuration >> >> >>>>> that I am using. >> >> >>>>> >> >> >>>>> ObjectMapper objectMapper = new ObjectMapper(); >> >> >>>>> objectMapper.setVisibility(PropertyAccessor.ALL, >> >> >>>>> Visibility.NONE); >> >> >>>>> objectMapper.setVisibility(PropertyAccessor.FIELD, >> >> >>>>> Visibility.ANY); >> >> >>>>> objectMapper.setSerializationInclusion(Include.NON_NULL); >> >> >>>>> >> >> >>>>> >> >> >>>>> >> objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, >> >> >>>>> false); >> >> >>>>> >> >> >>>>> But, deserialization (objectMapper.readValue(jsonText, .class);) >> >> >>>>> throws >> >> >>>>> this error. "Test" is the unknown attribute that comes in the >> JSON >> >> >>>>> String to >> >> >>>>> be deserialized. >> >> >>>>> >> >> >>>>> com.fasterxml.jackson.databind.exc.InvalidFormatException: >> Cannot >> >> >>>>> deserialize Map key of type com..* from String "Test": not a >> valid >> >> >>>>> representation, problem: >> >> >>>>> (com.fasterxml.jackson.databind.exc.InvalidFormatException) >> Cannot >> >> >>>>> deserialize Map key of type com.... from String "Test": not one >> of >> >> >>>>> values >> >> >>>>> excepted for Enum class: [ ] >> >> >>>>> >> >> >>>>> >> >> >>>>> Could someone please help me out with this issue? >> >> >>>>> >> >> >>>>> >> >> >>>>> Thanks! >> >> >>>>> >> >> >>>>> -- >> >> >>>>> 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. >> >> >> >> >> >> >> >> > -- >> >> > 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. >> > -- 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.
