Как Errai может сериализовать / десериализовать объекты модели

Я пытаюсь использовать возможности отдыха Errai в моем приложении GWT,
Я взглянул на следующее руководство:
http://errai-blog.blogspot.it/2011/10/jax-rs-in-gwt-with-errai.html

В частности, это говорит:

Мы просто помещаем этот интерфейс где-то в наших клиентских пакетах (например, client.shared), где его может найти компилятор GWT. Чтобы создать запрос, все, что нужно сделать, это вызвать RestClient.create()

Я думаю, что здесь есть пробел в сюжете, как Эррай может узнать, как сериализовать / десериализовать классы моделей?

Вы можете помочь понять это?

Спасибо

1 ответ

В соответствии с RestClient Метод create() класса

 public static <T, R> T create(final Class<T> remoteService, final RemoteCallback<R> callback, Integer... successCodes) {
   return create(remoteService, null, callback, null, successCodes);
}

В примере, который вы предоставили; при использовании метода create() Errai получает класс CustomerService как remoteServiceПосле многих операций;

Errai анализирует и реализует этот интерфейс CustomerService с помощью своей библиотеки errai-codegen, которая использует Java Reflection API.

При разборе просто;

  • Сначала он ищет аннотированные методы JAX-RS и определяет их как JaxrsResourceMethod

  • Затем он изучает параметры этого метода, если есть какой-либо параметр, аннотированный аннотациями JAX-RS.

  • Если он находит аннотированные параметры в JaxrsResourceMethod, он сохраняет этот параметр со своим типом аннотации

  • Если он находит не аннотированный параметр в JaxrsResourceMethod, он определяет его как entityParameter

  • Errai хранит эти аннотированные параметры и entityParameters в JaxrsResourceMethodParameters по их методу. При построении запроса он использует параметры по их правилу.

Позвольте мне объяснить эти правила на примере, который вы предоставили.

Customer customer = new Customer("new name", "new last name", "new postal code");
RestClient.create(CustomerService.class, callback).updateCustomer(240193, customer);

Errai создаст URL как

example.com/cusomers/240193

Потому что правило аннотации @PathParam("id") добавляет параметр в URL и в соответствии с правилом entityParameter от Errai. customer будет маршалироваться при отправке данных с PUT.

@PUT 
@Path("/{id}") 
@Consumes("application/json")
@Produces("application/json") 
public Customer updateCustomer(@PathParam("id") long id, Customer customer); //- See more at: http://errai-blog.blogspot.com.tr/2011/10/jax-rs-in-gwt-with-errai.html#sthash.2GTQtIg8.dpuf

Еще одно дополнительное замечание, если вы проверите здесь, есть исключение в методе setEntityParameter;

Для каждого метода допускается только один параметр без аннотации объекта:

Это означает, что вы не можете определить методы с более чем 1 аннотированным параметром в классе, который вы отправили в Errai.

Другие вопросы по тегам