如何通过http get请求获取JSON数据

时间:2015-03-30 10:20:54

标签: gwt vaadin7

我是Vaadin的新手。 在主题中,我想使http get reaquest以便获取一些JSON数据。 我怎么能这样做? 我一直试图通过com.google.gwt.http.client.RequestBuilder来做到这一点,但我已经获得了 java.lang.UnsatisfiedLinkError: com.google.gwt.xhr.client.XMLHttpRequest.create()。 我认为错误与GWT客户端性质有关。 那么如何在Vaadin 7服务器端进行http get请求? 这是我的代码:

package com.example.soaclient;

import javax.servlet.annotation.WebServlet; 
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.json.client.JSONValue;
import com.vaadin.annotations.Theme;
import com.vaadin.annotations.VaadinServletConfiguration;
import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinServlet;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Label;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout;

@SuppressWarnings("serial")
@Theme("soaclient")
public class SoaclientUI extends UI {

    @WebServlet(value = "/*", asyncSupported = true)
    @VaadinServletConfiguration(productionMode = false, ui = SoaclientUI.class)
    public static class Servlet extends VaadinServlet {

    }

    @Override
    protected void init(VaadinRequest request) {

        final VerticalLayout layout = new VerticalLayout();

        layout.setMargin(true);
        setContent(layout);
        Button button = new Button("Click Me");

        button.addClickListener(new Button.ClickListener() {

            public void buttonClick(ClickEvent event) {

                layout.addComponent(new Label("Thank you for clicking"));

                String url = "some URL goes here";
                RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url);

                try {

                    Request request = builder.sendRequest(null, new RequestCallback() {

                        public void onError(Request request, Throwable exception) {
                            // Couldn't connect to server (could be timeout, SOP violation, etc.)
                        }

                        public void onResponseReceived(Request request, Response response) {

                            if (200 == response.getStatusCode()) {
                                // Process the response in response.getText()
                            } else {
                                // Handle the error.  Can get the status text from response.getStatusText()

                            }
                        }
                    });
                } catch (RequestException e) {
                  // Couldn't connect to server
                }
            }
        });

        layout.addComponent(button);
    }
}

1 个答案:

答案 0 :(得分:0)

使用Vaadin,您不应使用com.google.gwt.http.client包中的任何内容。这仅适用于客户端开发,例如当你制作需要客户端副本的组件时。

您应该坚持使用通用的JDK库,而不是GWT类。例如。你可以简单地使用java.net.URL.openStream()。但是,如果您正在使用某些REST服务,则可以参考我最近的JAX-RS 2.0 Client article