Как мне сопоставить свойства ModelAttribute? - PullRequest
4 голосов
/ 16 марта 2012

У меня есть запрос, сопоставленный как

@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 голосов
/ 14 апреля 2012

Почему бы не использовать библиотеку тегов формы Spring? http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/view.html#view-jsp-formtaglib

Taglib (в сочетании с вашим контроллером) автоматически отображает ваш ModelAttribute. При выполнении запроса GET для формы вы создаете новый (возможно пустой) объект вашего PostRequest и вставляете его в модель. После POSTing пружина формы предоставляет вам 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>
...