Spring boot Thymleaf bind Абстрактное свойство типа класса для формирования - PullRequest
0 голосов
/ 12 октября 2019

У меня есть три класса. Я передаю класс 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
  1. Test.java: это основной класс модели, обладающий свойством типа Абстрактный класс
  2. AbsType.java: ABstract class
  3. 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, потому что существует множество классов, и нам не разрешено вносить какие-либо изменения в эти классы.

У меня вопрос, как разрешить эту ситуацию.

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