Would it not be easier to just create your JSON object manually with the classes in com.google.gwt.json.client? Ie: JSONObject, JSONArray, ...
On Thursday 23 May 2024 at 1:42:29 am UTC+10 Thomas Broyer wrote: > On Wednesday, May 22, 2024 at 12:43:56 PM UTC+2 [email protected] wrote: > > I misunderstood the documentation... ty for the clarification Thomas can > you give me some confirmations. > > The Date issue, When you say to use the JsDate do you mean the one in the > elemental2 package (elemental2.core.JsDate) or in the gwt core ( > com.google.gwt.core.client.JsDate) ? > > Any one of them, anything that directly maps to a native JS Date object. > > > So for the Date issue i just enough to replace this code : > > @JsProperty *public* *native* *Date* getDataRepertorioDocumento(); > > > > @JsProperty *public* *native* *void* setDataRepertorioDocumento(*Date* > dataRepertorioDocumento); > > > > With: > > @JsProperty *public* *native* Js*Date* getDataRepertorioDocumento(); > > > > @JsProperty *public* *native* *void* setDataRepertorioDocumento(*JsDate* > dataRepertorioDocumento); > > > > Right ? > > Yes. > (note that it works for serializing because a JS Date object has a > toJSON() method that returns its toISOString(), but it won't work for > parsing JSON, for that you will have to pass a *reviver* function to > JSON.parse() that will have to be aware of your object structure to know > that the dataRepertorioDocumento property value needs to be parsed to a > Date object, or use a @JsOverlay getter/setter pair that will > serialize/parse the java.util.Date or JsDate value to/from the JSON > representation you want, same as List and Map) > > I also missed an instance of Integer in your objects, this will have to be > changed to Double. > > > For the "List" and "Map" problem, i will probably try to use some > @JsOverlay instead to use a second argument on the JSON.stringify by the > way can you point me out some example (i'm not very skilled with this > library) ? > > > Could be as simple as (note that a copy is made each time the getter or > setter is called): > ReferenzaDTOGWT[] nodeIdAllegatti; > // This could also use Elemental's JsArrayLike.asList() > @JsOverlay public List<ReferenzaDTOGWT> getNodeIdAllegatti() { return > List.of(this.nodeIdAllegatti); } > @JsOverlay public void setNodeIdAllegatti(List<ReferenzaDTOGWT> > nodeIdAllegatti) { this.nodeIdAllegatti = nodeIdAllegatti.toArray(new > ReferenzaDTOGWT[nodeAllegatti.size()]); } > > JsPropertyMap<String> errors; > @JsOverlay public Map<String, String> getErrors() { > var ret = new HashMap<String, String>(); > errors.forEach(key -> ret.put(ret, errors.get(key))); > return ret; > } > @JsOverlay public setErrors(Map<String, String> errors) { > var obj = JsPropertyMap.<String>of(); > errors.forEach((key, value) -> obj.set(key, value)); > this.errors = obj; > } > > Of course for the Map<String, List<MetadatoDTOGWT>> mappaAltriMetadati > you'd have to also transform each List. > > The JSON.stringify replacer could look like: > JSONType.StringifyReplacerFn replacer = (key, value) -> { > if (value instanceof List<?>) { > return ((List<?>) value).toArray(); > } > if (value instanceof Map<?>) { > var obj = JsPropertyMap.<String>of(); > ((Map<?>) value).forEach((k, v) -> obj.set(k, v)); > return obj; > } > if (value instanceof Date) { > return ((Date) value).getTime(); // pass that to JsDate.create() if > you prefer an ISO-formatted String rather than the timestamp > } > if (value instanceof Integer) { > return ((Integer) value).doubleValue(); > } > return value; > }; > > This is all totally untested (also note that I haven't actually written > GWT code for years, this is all based on memory and the javadocs) > > Also I found this project updated for GWT 2.9.0 and java 11 > https://github.com/jp-solutions/gwt-interop-utils . it’s seem goof enough > for my use case, i’ll try out and let you know it. > > Not sure what it actually brings on top of plain old JsInterop Base or > Elemental Core… > -- You received this message because you are subscribed to the Google Groups "GWT Users" 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/c88b2e0c-0883-4ff1-b9a0-1d52d9040158n%40googlegroups.com.
