2016-07-10 5 views
3

Ich möchte senden Sie eine java.util.HashMap in JSON vom Client auf den Server konvertiert.Post-Map als JSON mit JSweet

Ich verwende JSweet, um Java in JavaScript für die Clientseite umzuwandeln.

hatte ich einen Blick auf XMLHttpRequest und versuchte, die Karte für die Übertragung JSON.stringify(new HashMap<>()) Verwendung vorzubereiten, aber das in einem auf der Client-Seite

TypeError: cyclic object value

geführt.

Das sind meine relevanten Abhängigkeiten (mit Gradle):

// Java to JavaScript transpilation 
    compile "org.jsweet:jsweet-transpiler:1.2.0-SNAPSHOT" 
    compile "org.jsweet.candies:jsweet-core:1.1.1" 
    // Allows us to use Java features like Optional or Collections in client code 
    compile "org.jsweet.candies:j4ts:0.2.0-SNAPSHOT" 

Antwort

3

ich die java.util.Map zu einem jsweet.lang.Object zu konvertieren hatte vor der Codierung als JSON stringify verwenden.

Hier ist der Code eine java.util.Map als JSON an den Server mit JSweet senden:

es
void postJson(Map<String, String> map, String url) { 
    XMLHttpRequest request = new XMLHttpRequest(); 

    // Post asynchronously 
    request.open("POST", url, true); 
    request.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); 

    // Encode the data as JSON before sending 
    String mapAsJson = JSON.stringify(toJsObject(map)); 
    request.send(mapAsJson); 
} 

jsweet.lang.Object toJsObject(Map<String, String> map) { 
    jsweet.lang.Object jsObject = new jsweet.lang.Object(); 

    // Put the keys and values from the map into the object 
    for (Entry<String, String> keyVal : map.entrySet()) { 
     jsObject.$set(keyVal.getKey(), keyVal.getValue()); 
    } 
    return jsObject; 
} 

Verwenden Sie wie folgt aus:

Map<String, String> message = new HashMap<>(); 
message.put("content", "client says hi"); 
postJson("http://myServer:8080/newMessage", message);