0

我正在尝试在我的 GWT 应用程序中使用 Errai 休息功能,我
查看了以下指南:
http ://errai-blog.blogspot.it/2011/10/jax-rs-in-gwt-with-errai .html

特别是,它说:

我们简单地将这个接口放在我们的客户端包(例如client.shared)中GWT 编译器可以找到它的地方。要创建一个请求,只需调用 RestClient.create()

我认为这里有一个情节漏洞,Errai 是如何知道如何序列化/反序列化模型类的?

你能帮助理解这一点吗?

谢谢

4

1 回答 1

1

根据RestClientClass的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 使用他们使用Java Reflection API的errai-codegen库来解析和实现这个 CustomerService 接口。

简单解析时;

  • 首先,它查找 JAX-RS 注释方法并将它们定义为 JaxrsResourceMethod

  • 然后,如果有任何使用 JAX-RS 注释注释的参数,它会查看该方法的参数。

  • 如果它在JaxrsResourceMethod中找到带注释的参数,则将该参数与其注释类型一起保存

  • 如果它在JaxrsResourceMethod中找到未注释的参数,则将其定义为entityParameter

  • Errai通过它们的方法将这些带注释的参数和实体参数保存在 JaxrsResourceMethodParameters 中。在构建请求时,它按其规则使用参数。

让我使用您提供的示例来解释这些规则。

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

Errai 将创建像

example.com/cusomers/240193

因为@PathParam("id") 注释规则正在向url 添加参数,并且根据Errai 的entityParameter 规则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 方法中存在异常,请再注意一点;

每个方法只允许一个非注释实体参数:

这意味着您不能在您在 Errai 中发送的 Class 中定义具有超过 1 个非注释参数的方法。

于 2016-05-29T15:04:53.323 回答