Spring MVC: создание конкретного подтипа родового связывания - PullRequest
0 голосов
/ 22 октября 2019

У меня есть interface MyElement и конкретный подтип, class MyElementImpl implements MyElement. Затем у меня есть универсальный класс, который использует интерфейс в качестве его верхней верхней границы:

public class MyContainer<T extends MyElement> {
  private List<T> elements;
  // getters and setters omitted for brevity
}

Я хочу использовать экземпляр MyContainer<MyElementImpl> в качестве атрибута модели в форме сообщения.

Я передаю атрибут модели в представление, где пользователь может отправить его обратно в форме сообщения. Для каждого элемента в контейнере я добавляю скрытые входные данные:

<form th:action="@{myForm}" th:object="${myContainer}" method="post">
  <th:block th:each="myElement, myStat : ${myContainer.elements}">
    <input type="hidden" th:field="*{elements[__${myStat.index}__].id}"/>
  </th:block>
</form

Однако Spring генерирует исключение, когда форма фиксируется, потому что он пытается создать экземпляр объектов общей верхней границы, interface MyElement. Разумеется, создание экземпляра интерфейса завершается ошибкой:

java.lang.NoSuchMethodException: MyElement.<init>()

Я попытался подтипить конкретный класс и использовать его в своей форме, но все равно получаю ту же ошибку.

public class MySpecialContainer extends MyContainer<MyElementImpl>

ЭтоПодпись метода post в моем контроллере:

@PostMapping("myUrl")
public String persist(@ModelAttribute MySpecialContainer container)

Как мне решить эту проблему?

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