Поиск по этому блогу

пятница, 15 марта 2013 г.

GWT RequestBuilder

В GWT есть инструмент для отправки запросов на серевер - это RequestBuilder. При помощи RequestBuilder'а мы можем отправлять REST-запросы на сервер. Работать с RequestBuilder очень просто. Для того чтобы создать объект  RequestBuilder,  необходимо вызвать конструктор с двумя параметрами.
RequestBuilder requestBuilder = new RequestBuilder(httpMethod, url);
httpMethod - метод, который используется запросом при обращении к серверу
url -адрес, по которому отправляется запрос.

Запрос, отправляемый на сервер может быть отправлен при помощи следующих методов

RequestBuilder.POST - добавление данных
RequestBuilder.GET - получение данных
RequestBuilder.PUT - изменение данных
RequestBuilder.DELETE - удаление данных


Методы RequestBuilder

1. Добавить к запросу заголовок
Заголовков может быть несколько

requestBuilder.setHeader(String header, String value);

2. Добавить к запросу данные, которые будут отправляться на сервер

requestBuilder.setRequestData(String requestData);

3. Установить к запросу callback - ответ, который придет пользователю от сервера после того, как сервер обработает запрос от пользователя.

В методе setCallback создаем анонимный класс RequestCallback и переопределяем в нем два метода: onResponseReceived и onError

requestBuilder.setCallback(new RequestCallback() {
 
   @Override
   public void onResponseReceived(Request request, Response response) {
 
   }
 
   @Override
   public void onError(Request request, Throwable exception) {
 
   }
});

В методе onResponseReceived обрабатываем ту ситуацию, когда сервер удачно обработал запрос и вернул ответ клиенту
В методе onError обрабатываем ситуацию, если возникла ошибка в результате выполнения запроса

4. Отправляем запрос на сервер

requestBuilder.send();

Отправляем запросы на сервер при помощи REST методов. Запросы обрабатываются при помощи REST-методов, но об этом уже в другой моей статье

RequestBuilder POST-запрос


// Создаем строку, в которую записываем адрес,
// по которому будем посылать запрос
String url = "/rest/cars/paginatedCars";
 
// Создаем объект requestBuilder
// С помощью этого объекта будем посылать запросы
// В конструкторе указываем тип метода - POST и адрес,
// по которому будем отправлять запрос
RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.POST, url);
 
// Задаем заголовок запросу, в котором указываем тип данных,
// которые будем передовать. В этом запросе мы передаем JSON
requestBuilder.setHeader("Content-Type", "application/json");
 
// Подготавливаем данные,
// которые будем отправлять на сервер
AutoBean<IPaginatedResultDto> bean = AutoBeanUtils.getAutoBean(paginatedResDTO);
 
// Прикрепляем к запросу данные, которые будем отправлять
requestBuilder.setRequestData(AutoBeanCodex.encode(bean).getPayload());
 
// Устанавливаем для запроса callBack - ответ, который
// придет пользователю от сервера после выполения запроса на сервере
requestBuilder.setCallback(new RequestCallback() {
 
 // Обрабатываем удачное выполнение запроса и определяем,
 // какие данные будем брать из ответа от сервера и
 // показывать пользователю
 @Override
 public void onResponseReceived(Request request, Response response) {
  // Получаем тект из ответа от сервера
  // и преобразуем его в нужные нам данные
  IPaginatedResultDto dto = DtoUtils.pagResJsonToDtoList(
                       response.getText());
                getView().pageLoaded(dto);
  List<T> dtoList = DtoUtils.pagResListJsonToDtoList(
                       response.getText(), clazz);
  dataProvider.getList().clear();
  dataProvider.getList().addAll(dtoList);
  dataProvider.flush();
  screenBlocker.getView().hide();
 }
 
 // Обрабатываем ошибку, которая может
 // возникнуть в ходе выполнения запроса
 @Override
 public void onError(Request request, Throwable exception) {
  screenBlocker.getView().hide();
  // Выводим сообщение об ошибке
  Window.alert(exception.getMessage());
 }
});
 
try {
 // Отправляем запрос на сервер
 requestBuilder.send();
} catch (RequestException e) {
 e.printStackTrace();
}

RequestBuilder GET-запрос 


GET-запрос на сервер с помощью RequestBuilder'а реализуется таким же образом, как и POST-запрос, только в GET-запросе мы не отправляем никаких данных на сервер, поэтому мы не добавляем к запросу данные и не вызываем метод
requestBuilder.setRequestData(String requestData);

// Отправляем GET-запрос на сервер
String url = "/rest/car/getCurrentCar";
RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.GET, url);
requestBuilder.setHeader("Content-Type", "application/json");
requestBuilder.setCallback(new RequestCallback() {
 
 @Override
 public void onResponseReceived(Request request, Response response) {
  JSONValue jsonValue = JSONParser.parseStrict(response.getText());
  AutoBean<IUserDto> bean = AutoBeanCodex.decode(
  DtoUtils.getTruckingFactory(), IUserDto.class,
   jsonValue.toString());
  getView().setCurrentDto(bean.as());
  getView().fillForm(bean.as());
 }
 
 @Override
 public void onError(Request request, Throwable exception) {
  exception.getMessage();
 }
});
 
try {
 requestBuilder.send();
} catch (RequestException e) {
 e.printStackTrace();
}

Комментариев нет:

Отправить комментарий