У меня есть три класса. Я передаю класс Test в модель и пытаюсь связать / отправить свойство формы со свойствами класса Test. Но в классе Test есть свойство, которое является типом абстрактного класса, и во время рендеринга пружина выдает следующее исключение.
Invalid property 'type' of bean class [com.b3ds.ifarm.crs.models.Test]: Could not instantiate property type [com.b3ds.ifarm.crs.models.AbsType] to auto-grow nested property path; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.b3ds.ifarm.crs.models.AbsType]: Is it an abstract class?; nested exception is java.lang.InstantiationException
- Test.java: это основной класс модели, обладающий свойством типа Абстрактный класс
- AbsType.java: ABstract class
- TestType. Java: конкретный класс AbsType.java
Test.java
public class Test {
private String id;
private AbsType type;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public AbsType getType() {
return type;
}
public Test setType(AbsType type) {
this.type = type;
return this;
}
}
AbsType.java
public abstract class AbsType{
public AbsType copy(){
return typedCopy();
}
protected abstract AbsType typedCopy();
}
TestType.java
public class TestType extends AbsType{
private String name;
public TestType(String name) {
this.name = name;
}
public TestType() {
}
@Override
protected TestType typedCopy() {
return new TestType(name);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Метод контроллера
@GetMapping("/test")
public String test(Model model){
model.addAttribute("form", new Test());
return "test";
}
Шаги: Iпробовал следующие шаги, но не работал
Попробуйте 1:
@Configuration
@ComponentScan(basePackages = "com.b3ds.ifarm.crs")
class AplicationContext{
@Bean
public AbsType type(String name){
return new TestType(name)
}
}
Попробуйте 2: В классе контроллера
@ModelAttribute("form")
public Test type(){
return new Test();
}
Но ни один из них не работает. Я использую весеннюю загрузку и конфигурацию на основе Java.
Приведенные выше классы предназначены только для воссоздания проблемы, реальные классы более сложны и исходят от сторонних разработчиков. Мое ограничение: я не могу комментировать бетон с помощью аннотации @Component, потому что существует множество классов, и нам не разрешено вносить какие-либо изменения в эти классы.
У меня вопрос, как разрешить эту ситуацию.