我是Spring的新手,由于Spring提供了很多方法将HTTP请求映射到Java对象,我希望有人可以建议我如何解决这个问题:
我有一个发送
请求的客户端 ContentType: application/x-www-form-urlencoded
某些请求参数的名称如
"form_data[orderStatus]", "form_data[orderNumber]", etc'
我无法控制这个客户!
我有一个名为MyOrder的java类(@Component),如下所示:
@component
@Scope("prototpe")
public class MyOrder {
private String orderStatus;
private String orderNumber;
//etc'
public void setOrderStatus(String orderStatus) {
this.orderStatus = orderStatus;
}
//public setter for all other properties, as the above
}
创建MyOrder实例的最简单方法是什么 填充了所有" form_data []"的所有值,以便我可以拥有一个包含MyOrder参数的签名的控制器方法,例如:
public ModelAndView saveNewOrder( @RequestParam("foo") String foo,
@ModelAttribute("myOrder") MyOrder anOrder) {
//... impl'n here
}
我能想到的最好的解决方案是使用一个Web过滤器,它可以使请求参数名称更加明确,例如" form_data [attrib1]"到" attrib1",然后Spring将完成填充MyOrder实例的所有工作。 这样做的一个缺点是请求可能同时具有" form_data [attrib1]"和" attrib1"参数。例如:
form_data[orderStatus]=ok
orderStatus=fail
在这种情况下,我希望MyOrder.orderStatus具有值" ok"。
利用Spring的任何好方法都可以从请求中创建MyOrder吗?
作为替代方案,那不使用MyOrder类,有没有办法让Spring将所有form_data []参数及其值映射到地图,以便我可以在下面使用控制器方法?
public ModelAndView saveNewOrder( @RequestParam("foo") String foo,
<some annotation> @Map<String,String> formFieldsOfAnOrder) {
//... impl'n here
orderStatus = formFieldsOfAnOrder.get("orderStatus");
//or at least:
orderStatus = formFieldsOfAnOrder.get("form_data[orderStatus]");
}