Errai如何序列化/反序列化模型实体

时间:2016-05-22 20:25:18

标签: java json gwt errai

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

特别是,它说:

  

我们只是将此界面放在我们的客户端软件包中(例如   client.shared)GWT编译器可以找到它。创建请求   所有需要做的就是调用RestClient.create()

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

你能帮助解决这个问题吗?

感谢

1 个答案:

答案 0 :(得分:1)

根据RestClient Class的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使用errai-codegen使用Java Reflection APIJaxrsResourceMethod库解析并实现此CustomerService接口。

简单解析时;

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

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

  • 如果它在JaxrsResourceMethod中找到了未标记的参数,则会将该参数与其注释类型保持一致

  • 如果在JaxrsResourceMethodParameters中找不到annontated参数,则将其定义为 entityParameter

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

让我用你提供的例子来解释这些规则。

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

如果您检查enter image description here setEntityParameter方法中存在异常,还需要另外注意;

  

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

这意味着您无法在Errai中发送的Class中定义带有多个非注释参数的方法。