2014-10-20 3 views
0

Я читал ссылку: http://www.gwtproject.org/doc/latest/tutorial/JSON.html и обнаружил, что типы JSNI и overlay используются для декодирования данных JSON со стороны сервера.Зачем использовать типы JSNI и overlay для представления объекта JSON, возвращаемого с сервера в проекте GWT?

// Send request to server and catch any errors. 
    RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url); 

    try { 
     Request request = builder.sendRequest(null, new RequestCallback() { 
     public void onError(Request request, Throwable exception) { 
      displayError("Couldn't retrieve JSON"); 
     } 

     public void onResponseReceived(Request request, Response response) { 
      if (200 == response.getStatusCode()) { 
      updateTable(JsonUtils.<JsArray<StockData>>safeEval(response.getText())); 
      } else { 
      displayError("Couldn't retrieve JSON (" + response.getStatusText() 
       + ")"); 
      } 
     } 
     }); 
    } catch (RequestException e) { 
     displayError("Couldn't retrieve JSON"); 
    } 

Почему это использовать JsonUtils.> SafeEval (response.getText()) для декодирования данных в формате JSON? Нужно ли это делать? Это единственный способ получить данные JSON при использовании GWT?

ответ

1

Нет, это не единственный способ. Однако JsonUtils.safeEval либо использует встроенный браузер (например, native, поэтому считается самым быстрым способом сделать это) JSON.parse() (см. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse), который превратит строку JSON в объект JavaScript.

В свою очередь, типы наложения позволяют писать Java-код, который непосредственно сопоставляется с объектом JavaScript, что делает его очень простым и легким для обсуждения базовых данных JS от вашего обычного Java-кода.

Конечно, есть и другие варианты, а также, с верхней части моей головы, вы можете использовать JSONObject класс в com.google.gwt.json.client пакете - это по-прежнему делает JSON.parse() вызов, но затем предоставляет данные через Map- и список, как структура для вашего Java-кода. Кроме того, AutoBeans позволяет объявлять интерфейсы, описывающие структуру данных, и считывать из строки JSON (или объект JavaScript) в эти интерфейсы - это позволяет вашему коду вести себя как Java со встроенными коллекциями и т. Д. стоимость некоторых характеристик для перевода вперед и назад.

+1

См. Https://stackoverflow.com/a/15876202/116472, https://stackoverflow.com/a/10685489/116472 или https://stackoverflow.com/a/8212611/116472 для различных встроенных функций, в вариантах для разбора JSON в GWT. –