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 <[email protected]>
> 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"
> <[email protected]> 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
>>
>