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

特别是说:


我们只需将此接口放在客户端程序包中的某个位置即可(例如
client.shared),GWT编译器可以在其中找到它。创建请求
所有需要做的就是调用RestClient.create()


我认为这里有一个绘图漏洞,Errai如何知道如何对模型类进行序列化/反序列化?

你能帮我理解吗?

谢谢

最佳答案

根据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使用其使用errai-codegenJava Reflection API库来解析和实现此CustomerService接口。

简单解析时;


首先,它查找带有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将创建如下网址


example.com/cusomers/240193


因为@PathParam(“ id”)注释规则正在向URL添加参数,并且根据Errai的entityParameter规则,当使用PUT发送数据时,将整理customer

@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


如果您选中here,请另外注意一点:setEntityParameter方法中存在异常;


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


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

09-26 12:25