请求正文如下:
invoice[id]=111&invoice[billingDatetime]=2012-02-03T21:49:33+00:00&customer[code]=MILTON_WADDAMS&transaction[id]=f5574752-4eb0-11e1-a628-40403c39f8d9&transaction[transactedDatetime]=2012-02-03T21:49:33+00:00&invoice[type]=subscription&transaction[amount]=651.85&transaction[response]=approved&invoice[invoiceNumber]=3524&customer[id]=kui
我有以下代码来处理上述请求,但它无法将请求正文解析为发票和客户对象。任何建议都非常感谢!
public ModelAndView postPaymentSuccess(@ModelAttribute("invoice") Invoice invoice,@ModelAttribute("customer) Customer customer,HttpServletRequest req, HttpServletResponse res) {
.......}
答案 0 :(得分:0)
如果希望表单表示多个对象,则创建表示整个表单的新对象通常更简单,并且新对象具有其他对象的字段。对于你的情况是这样的:
public class CustomerInvoiceForm {
private Invoice invoice;
private Customer customer;
// getters and setters
...
}
public ModelAndView postPaymentSuccess(@ModelAttribute("customerInvoiceForm") CustomerInvoiceForm, ...) {
...
}
然后你会更接近让Spring以你想要的方式绑定。 Spring在请求参数名称中不使用方括号来表示嵌套字段,但它使用句点/点。因此,您必须使用“invoice.id”代替“invoice [id]”。
如果您无法更改请求参数名称,则必须手动将请求参数绑定到对象。