Я делаю изменения в очень старом приложении. который использует 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); ???
}