如何将Spring MVC中的请求映射到Java对象

时间:2017-09-03 16:52:20

标签: java spring spring-mvc

我是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]"); 
 }

0 个答案:

没有答案