Как настроить привязку FORM в Spring MVC 4.3, чтобы иметь в контроллере соответствующий дочерний объект дерева наследования - PullRequest
7 голосов
/ 23 апреля 2020

Я делаю изменения в очень старом приложении. который использует Spring MVC 4.

Мне нужно отправить данные из тега form: form в JSP для контроллера Spring. Пользовательский интерфейс исправлен, и я могу вносить изменения только на стороне сервера. Основываясь на указанном c поле в моей отправленной форме, я хочу иметь правильный экземпляр дочернего объекта в параметре моего метода обработчика контроллера.

Например,

class Payment {...}
class CardPayment extends Payment{...}
class CheckPayment extends Payment{...}

В форме пользовательского интерфейса , будет входное значение с именем paymentType. оплата будет commandObject или ModelAttribute

Я хочу, чтобы у моего контроллера @PostMapping был правильный дочерний объект в аргументе. Я не хочу создавать его вручную в коде контроллера.

@PostMapping
public ModelAndView doSomePay(@ModelAttribute("payment") Payment paymentInput, BindingResult result){

Теперь я хочу, чтобы этот paymentInput объект выше имел тип CardPayment или checkPayment.

Я пытался создать @initBinder and WebDatabinder но на самом деле у меня есть около 10 подклассов, нужно ли мне создавать «Редактор» для всех них?

Если да, каков наилучший способ создания свойстваEditor коротким и быстрым

@InitBinder
    public void initBinder(WebDataBinder binder, HttpServletRequest request) {
        String paymentType = request.getParameter("paymentType");

        PropertyEditor productEditor;
       //somehow I can find the correct child class that I need to see, for example CardPatment.class ,  Now how to do following 

       binder.set(Product.class,productEditor); ???
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...