> Object Id being encapsulated with Type Id would have been problematic, 
> either way, although I am not 
> sure what the remaining problem then would be. 

I understand correctly that ObjectId in json must be "raw" value? "Raw" I 
mean not wrapped.

So, seems using ObjectMapper.DefaultTyping.NON_FINAL did the trick.
But I have latest question: is ObjectMapper.DefaultTyping.EVERYTHING really 
useful? What is case of using it?


On Saturday, May 16, 2020 at 8:30:54 PM UTC+3, Tatu Saloranta wrote:
>
> On Sat, May 16, 2020 at 12:41 AM maxxyme <[email protected] <javascript:>> 
> wrote: 
> > 
> > Sorry to jump into the conversation, but wasn't it what he has been 
> doing in his User class already? 
> > (using ObjectIdGenerators.PropertyGenerator in his JsonIdentityInfo 
> definition) 
> > 
> > Thanks for any explanation. 
> > maxxyme 
>
> No problem at all jumping to help. Looking at code now, you are right: 
> PropertyGenerator is being used. 
> Earlier I thought I saw it use `IntSequenceGenerator`, which would not 
> have worked. 
>
> So that part of my suggestion was misleading. 
>
> Object Id being encapsulated with Type Id would have been problematic, 
> either way, although I am not 
> sure what the remaining problem then would be. 
>
> -+ Tatu +- 
>
> > 
> > On Sat, May 16, 2020, 06:07 Tatu Saloranta <[email protected] 
> <javascript:>> wrote: 
> >> 
> >> On Thu, May 14, 2020 at 7:38 AM Alex T <[email protected] <javascript:>> 
> wrote: 
> >>> 
> >>> Hi Tatu! 
> >>> 
> >>> For now I solve issue changing from mapper.activateDefaultTyping(ptv, 
> ObjectMapper.DefaultTyping.EVERYTHING); to 
> >>> mapper.activateDefaultTyping(ptv, 
> ObjectMapper.DefaultTyping.NON_FINAL); 
> >>> 
> >>> Please see 
> https://github.com/alex-t0/deserialization-fail-example/commit/5c1e9f73a21567c04823145993ffd09c314a276e#diff-590456d68d9f15ce57513829910aa370.
>  
>
> >>> 
> >>> Now it does not wrap user id. And deserialization works fine. 
> >> 
> >> 
> >> That makes sense. Actually having Type Id for `Long` is fine in itself, 
> but it would not have worked as type id most likely. And there can not be 
> any polymorphism anyway in that location. 
> >> 
> >>> But I'm not understand what you mean about @JsonIgnore'ing or removing 
> my id field. It is a primary key and I need this field. If I add 
> @JsonIgnore to id field I get this error: 
> >> 
> >> 
> >> What I mean is that combination of settings you had was incompatible. 
> You need to either: 
> >> 
> >> 1. Let Jackson generate Object Id by itself and NOT have id field in 
> your POJO, OR 
> >> 2. Use an existing field as Object Id and make sure Jackson uses that 
> field and does NOT generate Object id. 
> >> 
> >> For second, I already said that... 
> >> 
> >> "For using fields, you'd need to use 
>  `ObjectIdGenerators.PropertyGenerator`" 
> >> 
> >> so change generator type to that, from what you had. 
> >> 
> >> -+ Tatu +- 
> >> 
> >> 
> >>> 
> >>> 
> >>> Caused by: java.lang.IllegalArgumentException: Invalid Object Id 
> definition for deserialization.fail.example.User: cannot find property with 
> name 'id' 
> >>>     at 
> com.fasterxml.jackson.databind.ser.BeanSerializerFactory.constructObjectIdHandler(BeanSerializerFactory.java:491)
>  
>
> >>>     at 
> com.fasterxml.jackson.databind.ser.BeanSerializerFactory.constructBeanOrAddOnSerializer(BeanSerializerFactory.java:414)
>  
>
> >>>     at 
> com.fasterxml.jackson.databind.ser.BeanSerializerFactory.findBeanOrAddOnSerializer(BeanSerializerFactory.java:286)
>  
>
> >>>     at 
> com.fasterxml.jackson.databind.ser.BeanSerializerFactory._createSerializer2(BeanSerializerFactory.java:231)
>  
>
> >>>     at 
> com.fasterxml.jackson.databind.ser.BeanSerializerFactory.createSerializer(BeanSerializerFactory.java:165)
>  
>
> >>>     at 
> com.fasterxml.jackson.databind.SerializerProvider._createUntypedSerializer(SerializerProvider.java:1474)
>  
>
> >>>     at 
> com.fasterxml.jackson.databind.SerializerProvider._createAndCacheUntypedSerializer(SerializerProvider.java:1422)
>  
>
> >>>     ... 100 more 
> >>> 
> >>> PS. Can you reemove my second duplicate thread 
> https://groups.google.com/forum/#!topic/jackson-user/MK8RLm8Unu0? 
> >>> 
> >>> On Tuesday, May 12, 2020 at 2:07:55 AM UTC+3, Tatu Saloranta wrote: 
> >>>> 
> >>>> On Mon, May 11, 2020 at 9:52 AM Alex T <[email protected]> wrote: 
> >>>> > 
> >>>> > Hi everyone! 
> >>>> > 
> >>>> > When serializing entity with many references to another same 
> entity, if that entity marked @JsonIdentityInfo, first occurence of entity 
> serialized as full entity, other occurrences are serialized as id. Its 
> work. 
> >>>> > I need to serialize entities with type information, so I use 
> polymorphic type handler. 
> >>>> > 
> >>>> > I created test project: 
> https://github.com/alex-t0/deserialization-fail-example.git 
> >>>> > 
> >>>> > Please see this classes: 
> >>>> > 
> >>>> > User - 
> https://github.com/alex-t0/deserialization-fail-example/blob/master/src/main/java/deserialization/fail/example/User.java
>  
> >>>> > UserPair - 
> https://github.com/alex-t0/deserialization-fail-example/blob/master/src/main/java/deserialization/fail/example/UserPair.java
>  
> >>>> > MapperUtil - 
> https://github.com/alex-t0/deserialization-fail-example/blob/master/src/main/java/deserialization/fail/example/MapperUtil.java
>  
> >>>> > UserSerializationTest - 
> https://github.com/alex-t0/deserialization-fail-example/blob/master/src/test/java/deserialization/fail/example/UserSerializationTest.java
>  
> >>>> > 
> >>>> > Serialization works as I expect: 
> >>>> > 
> >>>> > [ 
> >>>> >     "deserialization.fail.example.UserPair", 
> >>>> >     { 
> >>>> >         "user1": [ 
> >>>> >             "deserialization.fail.example.User", 
> >>>> >             { 
> >>>> >                 "id": [ 
> >>>> >                     "java.lang.Long", 
> >>>> >                     42 
> >>>> >                 ], 
> >>>> 
> >>>>                    ^^^^^^^^^ 
> >>>> 
> >>>> This is wrong. Id should be plain number (`42`) and suggests the most 
> >>>> likely problem. 
> >>>> It should never be wrapped in type information (in fact, not even 
> >>>> normal `long`/`Long` properties, being 
> >>>> one of small number of "natural" types). 
> >>>> 
> >>>> Definition JsonIdentityInfo info is the problem in this case: 
> >>>> 
> >>>> @JsonIdentityInfo( 
> >>>>         generator = ObjectIdGenerators.PropertyGenerator.class, 
> >>>>         property = "id", 
> >>>>         scope = User.class 
> >>>> ) 
> >>>> 
> >>>> ... because you are trying to use an actual physical field (`private 
> >>>> long Id`), but this definition would 
> >>>> try to generate new value and assumes there is no "real" field. 
> >>>> For using fields, you'd need to use 
> >>>> `ObjectIdGenerators.PropertyGenerator` (but then id must be populated 
> >>>> by your code). 
> >>>> 
> >>>> Alternatively you should either just remove the field (if not 
> needed), 
> >>>> or, if needed for Hibernate or such, 
> >>>> add `@JsonIgnore` on it. 
> >>>> But assuming this Id value comes from DB (sequence?), the first 
> option 
> >>>> is probably what you want. 
> >>>> 
> >>>> Combination of Hibernate module and JSON Identity might cause other 
> >>>> issues as well, since unfortunately Hibernate module 
> >>>> is not maintained and its support for Proxy types seems to cause 
> >>>> problems with some Jackson features. 
> >>>> Another possibility just for testing might be to try to not register 
> >>>> that module, just to isolate problematic component. 
> >>>> 
> >>>> I hope this helps, 
> >>>> 
> >>>> -+ Tatu +- 
> >>> 
> >>> -- 
> >>> 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] <javascript:>. 
> >>> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/jackson-user/52f9385a-3185-439d-a1f0-c1f881587bfc%40googlegroups.com.
>  
>
> >> 
> >> -- 
> >> 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] <javascript:>. 
> >> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/jackson-user/CAGrxA27a8GjJ6mgybdJTYcNqYpbJ38%3Daa7uYgOrgBVtWBD75MA%40mail.gmail.com.
>  
>
> > 
> > -- 
> > 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] <javascript:>. 
> > To view this discussion on the web visit 
> https://groups.google.com/d/msgid/jackson-user/CAEEu3mBTO7X0PomkYEfAWiXGsFxchuHu3kpX%3Dy8BjiCxSZJ71A%40mail.gmail.com.
>  
>
>

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/jackson-user/a52486b5-4681-4677-91f6-b19e39071b28%40googlegroups.com.

Reply via email to