There is indeed something in it. Actually you could have some type of 
naming convention, like in TJSON 
(https://tonyarcieri.com/introducing-tjson-a-stricter-typed-form-of-json) 
or TypedJson (https://www.npmjs.com/package/typed-json) to figure out 
proper types. But then I would need to create eg. ArrayList with the 
Manuel's trick (the asList() from Polymer). I'll test it. 

On Tuesday, 9 May 2017 13:30:40 UTC+2, Thomas Broyer wrote:
>
>
> On Tuesday, May 9, 2017 at 12:08:12 PM UTC+2, Marcin Okraszewski wrote:
>>
>> In short I would like JS arrays to be visible in GWT as a List and 
>> objects parsed from JSON also as a Map. 
>>
>> Maybe I'll try one more time to explain what we have. We share model 
>> between server and GWT in form of java interfaces. Those interfaces are 
>> declared as return types of Jersey services, which serve instances of those 
>> interfaces. GWT uses exactly the same interfaces and handles them with 
>> AutoBeans. It works quite well, but there are two issues. First issue is 
>> that occasionally we need to pass some part of the data to JS. More often 
>> than not, it is a list or contains a list. As a result, we need to 
>> repackage it, as GWT objects are not understood by JS. Now we plan to 
>> leverage more JS, so we will have to deal with this problem more often. 
>> Second issue is that AutoBeans turned out to be inefficient in larger 
>> scale, as the generated code is roughly 50% of our written code.
>>
>> So, we came up with following idea: let’s keep shared interfaces, just 
>> annotate them with @JsType(native=true). Then use regular browser’s JSON 
>> parser and cast parsed object into model interface with @JsType. It works 
>> like charm for simple objects, but not for collections - List is being 
>> parsed as an JS array; Map is nothing else but just regular object. 
>> Dropping support for java collections, would be very expensive, and would 
>> require heavy refactoring, as the app is big (over 0.5 million Java lines 
>> in GWT + affected server parts). I thought there could be a way to tell 
>> JsInterop that specific field is backed by a plain array (or list) and an 
>> object (for map).
>>
>
> How about using the 'reviver' argument of JSON.parse() to copy/wrap arrays 
> into lists? (would be harder to detect those objets that you want into maps 
> though; the "reviver" could probably be generated from your interfaces to 
> match on the key name though – this is something I've been thinking about 
> for a few days actually, I really need to put my thoughts together in a 
> gist or a message to this list)
>
> https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse
>  
>

-- 
You received this message because you are subscribed to the Google Groups "GWT 
Contributors" 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/google-web-toolkit-contributors/e23d68e5-3f89-41ea-a2ae-b240f2ea1b33%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to