如何映射ModelAttribute的属性?

时间:2012-03-16 08:06:50

标签: java spring-mvc modelattribute

我的请求映射为

@RequestMapping(value = "/path", method = RequestMethod.POST)
public ModelAndView createNewItem(@ModelAttribute PostRequest request)

和PostRequest有一些属性,例如userName (getUserName()/setUserName())但客户端会发送user_name=foo而不是userName=foo等参数。是否有注释或自定义映射拦截器来执行此操作而不放置所有这些丑陋的setUser_name()方法?

由于这种情况经常发生(我必须实现一个使用下划线的API),实现中的一些努力是可以接受的。

1 个答案:

答案 0 :(得分:0)

为什么不使用Spring的表单标记库? http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/view.html#view-jsp-formtaglib

taglib(与您的控制器结合使用)会自动映射您的ModelAttribute。在对表单执行GET请求时,您将创建PostRequest的新(可能为空)对象并将其粘贴到模型中。 POST后,表单弹簧为您提供表单值的ModelAttribute。

示意图:

控制器:

@RequestMapping(value="/path", method = RequestMethod.GET)
public String initForm(ModelMap model) {

        PostRequest pr = new PostRequest();
        model.addAttribute("command", pr);

        return "[viewname]";
    }

@RequestMapping(value="/path", method = RequestMethod.POST)
public ModelAndView postForm(
        @ModelAttribute("command") PostRequest postRequest) {

        // postRequest should now contain the form values
        logger.debug("username: " + postRequest.getUsername());

        return "[viewname]";
     }

jsp:

<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>

<form:form method="post" enctype="utf8">
    Username: <form:input path="username" />
   <br/>
   <%-- ... --%>
   <input type="submit" value="Submit"/>
</form:form>