Я обновил зависимость 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);
object
- это объект универсального типа T, который представляет собой 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()
)класс расширен суперклассом.