У меня есть 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)
Как мне решить эту проблему?