【问题标题】:How is Errai able to serialize/deserialize model entitiesErrai 如何能够序列化/反序列化模型实体
【发布时间】:2016-05-22 20:25:18
【问题描述】:

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

特别是,它说:

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

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

你能帮忙理解一下吗?

谢谢

【问题讨论】:

    标签: java json gwt errai


    【解决方案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 Class为remoteService,经过多次操作;

    Errai 使用他们的 errai-codegen 库解析并实现此 CustomerService 接口,该库使用 Java Reflection API

    简单解析时;

    • 首先它查找 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 会创建类似

    的 url

    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
    

    如果您检查here,还有一个附加说明,setEntityParameter 方法中存在异常;

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 2016-04-11
      • 2012-06-11
      • 2019-04-10
      • 1970-01-01
      • 2019-02-24
      • 2021-09-27
      相关资源
      最近更新 更多