java - 将 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 中存在公共方法,编译器也会出错。
笔记:
- 相同的代码适用于 restygwt 1.3 版。
- 当我
@Override public getId()
在子类 DTO 中添加方法时,错误就消失了。(为什么会这样?超类已经有了相同的方法,那为什么编译器找不到呢?) - 更改
@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()
)是超类扩展的类。
解决方案
尝试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
希望有帮助。
推荐阅读
- flutter - Flutter Streambuilder 暂停
- continuous-integration - 在 Github 操作管道上设置默认超时
- java-8 - Java 无效的密钥库格式
- python - Python:在for循环中添加到列表列表中
- c# - C# - 打印目录中的所有文件
- c# - 使用 Path.Combine() 时源和目标必须不同
- angular - “IonList”不可分配给“HTMLIonItemSlidingElement 离子”类型的参数
- python - 如何避免 Python 用科学计数法打印数字?
- c++ - 如何用 getaddrinfo 替换 inet_pton
- angular - @ngrx/data - 如何扩展集合缩减器/替换对数据服务调用结果的处理?