从vaadin客户端向外部服务器发出请求,并将JSON响应返回给我的服务器

时间:2016-04-14 12:20:24

标签: vaadin

使用api,它给我一个只能使用客户端ip的访问令牌,所以我试图在客户端向该外部站点发出请求,并将JSON响应返回给我的服务器。问题是如何在客户端上发出请求并存储JSON,以便我可以将其发送到服务器。

谢谢

1 个答案:

答案 0 :(得分:3)

看看Vaadin的

  

集成JavaScript组件和扩展

这里:

https://vaadin.com/docs/-/part/framework/gwt/gwt-javascript.html#gwt.javascript.rpc

您可以创建一个JavaScript连接器组件,然后可以使用它来生成RPC:

@JavaScript({"mycomponent-connector.js"})
public class MyComponent extends AbstractJavaScriptComponent {

    public MyComponent(){
        // when you create the component 
        // add a function that can be called from the JavaScript
        addFunction("returnResponse", new JavaScriptFunction() {
            @Override
           public void call(JsonArray arguments) {
               String response = arguments.getString(0));
               // do whatever
            }
        });
    }

    // set up a way to make the request
    public void makeRequest(String url) {
        callFunction("makeRequest", url);
    }

}

使用JavaScript文件mycomponent-connector.js(使用XMLHttpRequest示例):

window.com_example_mypackage_MyComponent =
function() {
    var connector = this;

    // add a method to the connector
    this.makeRequest = function(theUrl){
        var xmlHttp = new XMLHttpRequest();
        xmlHttp.onreadystatechange = function() { 
            if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
                connector.returnResponse(xmlHttp.responseText);
            }
        };
        xmlHttp.open("GET", theUrl, true); // true for asynchronous 
        xmlHttp.send(null);
   }
};

在服务器端调用方法MyComponent.makeRequest("myurl")将触发客户端上的makeRequest方法。返回响应后,我们调用connector.returnResponse(xmlHttp.responseText)将其发送回服务器,并由"returnResponse"的构造函数中添加的MyComponent函数处理。