标有@ModelAttribute 注解的方法可以访问表单数据吗?

Can a method marked with the @ModelAttribute annotation access the form data?

我正在尝试让 Spring 根据表单中的特定字段实例化特定对象类型,但我不确定该怎么做。我可以通过如下解析 URL 来正确地做到这一点:

@ModelAttribute("order")
public Order getOrderTypeFromUrl(final HttpServletRequest request)
{
    String url = request.getRequestURI();
    String type = url.substring(url.lastIndexOf("-") + 1, url.length());
    switch (type)
    {
        case "PRNOrder" : return new PRNOrder();
        case "Frequency Scheduled Order" : return new FrequencyScheduledOrder();
    }
    return null;
}

但是,我希望更改我的 URL 以不再包含用户添加的订单类型。我希望此方法能够访问提交给控制器时表单中的字段,但我不确定要向我的方法添加什么参数来实现此目的。请求对象的参数和属性不包含表单数据。

谢谢

事实证明,只要您为包含订单类型的隐藏文本字段设置 ID 和名称,这就可以正常工作!!!! (今天该停止编码了!):

@ModelAttribute("order")
public Order getOrderTypeFromRequest(final HttpServletRequest request, final Model model)
{
    try
    {
        String orderType = request.getParameter("type");
        switch (orderType)
        {
            case "PRNOrder" : return new PRNOrder();
            case "frequencyScheduledOrder" : return new FrequencyScheduledOrder();
        }
    }
    catch (Exception ex)
    {
        return null;
    }
    return null;
}