Зачем использовать JSNI и типы наложения для представления объекта JSON, возвращаемого с сервера в проекте GWT?

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

    // 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?


person injoy    schedule 20.10.2014    source источник


Ответы (1)


Нет, это не единственный способ. Однако JsonUtils.safeEval будет либо использовать встроенный в браузер (т. е. собственный, поэтому предполагается, что это самый быстрый способ сделать это) 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(), но затем предоставляет данные через структуру, подобную карте и списку, для вашего кода Java. . Кроме того, AutoBeans позволяет объявлять интерфейсы, описывающие структуру данных, и считывать из строки JSON (или объекта JavaScript) в эти интерфейсы — это позволяет вашему коду вести себя более похоже на Java со встроенными коллекциями и т.п. стоимость некоторых спектаклей для перевода туда и обратно.

person Colin Alworth    schedule 21.10.2014
comment
См. stackoverflow.com/a/15876202/116472, stackoverflow.com/a/10685489/116472 или stackoverflow.com/a/8212611/116472 для различных встроенных опций для разбора JSON в GWT. - person Thomas Broyer; 21.10.2014