Hi, Any update on this fix? It would be really helpful if we get this in any of your newer versions. As of now, we are doing a workaround with the Map implementation to get this fixed.
Regards, Remya On Friday, 15 December 2017 10:26:05 UTC-6, Remya wrote: > > Thank you! > > On Thursday, 14 December 2017 17:35:32 UTC-6, Tatu Saloranta wrote: >> >> Thank you! >> >> If and when there is an update, it will be added in that issue, and >> you should be notified by github (as per settings >> you have for your account; default will send an email on issues you >> have created I think). >> >> -+ Tatu +- >> >> >> On Wed, Dec 13, 2017 at 8:50 PM, Remya <[email protected]> wrote: >> > 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. >> > -- 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.
