johnzon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Romain Manni-Bucau <rmannibu...@gmail.com>
Subject Re: Mapping objects with cycles
Date Wed, 06 Apr 2016 07:34:51 GMT
just check jsonp before, know they were talking about it and if so we
should rely on the spec. If not it sounds good for me.

Romain Manni-Bucau
@rmannibucau |  Blog | Github | LinkedIn | Tomitriber


2016-04-06 9:11 GMT+02:00 Mark Struberg <struberg@yahoo.de.invalid>:
> 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