Обновление restygwt с 1.3 до 2.2.3 ломает существующий код - PullRequest
0 голосов
/ 30 мая 2018

Я обновил зависимость 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 существует открытый метод.

ПРИМЕЧАНИЕ:

  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())класс расширен суперклассом.

1 Ответ

0 голосов
/ 05 июня 2018

Попробуйте использовать аннотацию JsonSubTypes в своем суперклассе.

Добавьте что-то подобное в свой суперкласс:

@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 / documents / restygwt-user-guide.html

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...