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/642a383f-ce8a-4224-b778-9bcecf6dbe44%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
