Если вы хотите, чтобы ваша форма представляла несколько объектов, часто проще создать новый объект для представления всей формы, и у этого нового объекта есть поля для других объектов. Для вашего случая что-то вроде этого:
public class CustomerInvoiceForm {
private Invoice invoice;
private Customer customer;
// getters and setters
...
}
public ModelAndView postPaymentSuccess(@ModelAttribute("customerInvoiceForm") CustomerInvoiceForm, ...) {
...
}
Тогда ты будешь ближе к тому, чтобы Spring связывал так, как ты этого хочешь. Spring не использует квадратные скобки в именах параметров запроса для обозначения вложенных полей, хотя он использует точки / точки. Таким образом, вместо "invoice [id]" вы должны использовать "invoice.id".
Если вы не можете изменить имена параметров запроса, вам придется вручную связать параметры запроса с вашими объектами.