首页 > 解决方案 > 将 restygwt 从 1.3 更新到 2.2.3 会破坏现有代码

问题描述

我在我的 web 应用程序中将 restygwt 依赖项从版本 1.3 更新到了 2.2.3。这次升级破坏了我现有的代码。我收到一个错误:[ERROR] Neither public argument id nor public getter getId found!编译 GWT 存储库接口时。我发现错误的原因是@Attribute存储库的以下功能中的注释。

@PUT
@Path("{id}")
void update(@PathParam("id") @Attribute("id") T object, MethodCallback<Void> callback);

是泛型类型 T的object对象,它是从其他超类 DTO 扩展的 DTO。超类 DTO 具有公共方法getId()和私有属性id。我不知道为什么即使超类 DTO 中存在公共方法,编译器也会出错。

笔记:

  1. 相同的代码适用于 restygwt 1.3 版。
  2. 当我@Override public getId()在子类 DTO 中添加方法时,错误就消失了。(为什么会这样?超类已经有了相同的方法,那为什么编译器找不到呢?)
  3. 更改@Attribute("id")@Attribute("getId()")也不起作用。

==================================================== ==================

    public abstract class AbstractDto implements Serializable {

    private static final long serialVersionUID = 1L;

    public String id;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((id == null) ? 0 : id.hashCode());
        return result;
    }
    ......
    ......
    ......
    }

是超类DTO,数据(即 object函数的参数update())是超类扩展的类。

标签: javagwt

解决方案


尝试JsonSubTypes在你的超类上使用 -annotation。

在你的超类中添加这样的东西:

@JsonSubTypes({ 
     @JsonSubTypes.Type(value = YourSubClass01.class, name = "YourSubClass01"),
     @JsonSubTypes.Type(value = YourSubClass02.class, name = "YourSubClass02")
})

并将此注释添加到每个子类:

@JsonTypeName("YourSubClass01")
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,
              include = JsonTypeInfo.As.EXTERNAL_PROPERTY)
public class YourSubClass01 { ... }

更多信息在这里:https ://resty-gwt.github.io/documentation/restygwt-user-guide.html

希望有帮助。


推荐阅读