johnzon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mark Struberg <strub...@yahoo.de.INVALID>
Subject Re: Mapping objects with cycles
Date Wed, 06 Apr 2016 07:11:14 GMT
Using JsonPointers for this is a good idea. 


I'm also fine with the 3 configurable modes.

With JsonPointers the sample would result in the following string:

{"name":"reinhard","marriedTo":{"name":"anna","marriedTo":"/"}}

We could store a IdentityMap<Object, String> to map from the Object to it's corresponding
JsonPointer during the processing. 


LieGrue,
strub





> On Wednesday, 6 April 2016, 0:59, Romain Manni-Bucau <rmannibucau@gmail.com> wrote:
> > JsonPointer is the clean solution to that.
> 
> Also I would like the default to fail - stackoverflow - and 2 flags to 1.
> skip 2. use jsonpointer.
> 
> Maintaining ref can have issues and == can fail in several cases, that s
> why I want this default matching model 1-1.
> 
> Finally to be complete flag should be an annot or global mapperbuilder (+
> chain until front integrations) option.
> 
> Le 5 avr. 2016 23:34, "Mark Struberg" 
> <struberg@yahoo.de.invalid> a écrit :
> 
>>  Hi!
>> 
>>  While discussing with Reinhard we came over an interesting use case:
>> 
>>  public class Person {
>>    private String name;
>>    private Person marriedTo;
>>  }
>> 
>>  Person reinhard = new Person("reinhard");
>>  Person anna = new Person("anna");
>> 
>>  reinhard.setMarriedTo(anna);
>>  anna.serMarriedTo(reinhard);
>> 
>>  String json = Mapper.writeObjectAsString(reinhard);
>> 
>> 
>> 
>>  Currently this sample would lead to an endless loop, right?
>> 
>>  BUT, we can do something against it: We keep a Map<Object, Integer>. 
> For
>>  each object written we increment the number;
>>  IF an object was already written before (comparison using == and not
>>  equals()!) then we write a 'placeholder'
>> 
>> 
> {"name":"reinhard","marriedTo":{"name":"anna","marriedTo":"1"}}
>> 
>>  Not sure if we can use a simple number or whether we need to use a
>>  placeholder object with e.g. "//javaType".
>> 
>>  But you get the idea I hope.
>> 
>>  Any thoughts?
>> 
>>  LieGrue,
>>  strub
>> 
>

Mime
View raw message