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.
