2012-03-16 4 views
4

I는 요청ModelAttribute의 속성을 매핑하는 방법은 무엇입니까?

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

같은 매핑 가지며 PostRequest 예컨대 같은 몇 가지 특성을 갖는다 userName (getUserName()/setUserName())이지만 클라이언트는 userName=foo 대신 user_name=foo과 같은 매개 변수를 전송합니다. 이 모든 못생긴 setUser_name() 메서드를 넣지 않고 주석 또는 사용자 정의 매핑 인터셉터를 사용할 수 있습니까?

매우 자주 발생하므로 (구현시 모든 노력을 기울여야 함) 모든 구현 노력이 허용됩니다.

+0

[스프링 MVC 명령 객체를 결합 할 때 파라미터 이름을 지정하는 방법 (HTTP의 중복 가능성 : // 유래 .com/questions/8986593/how-to-customize-parameter-names-when-binding-spring-mvc-command-objects) – Bozho

+1

좋은 질문입니다. 나는 2 주 전에 그것을 직면했다. 내 솔루션이 작동하는지 확인할 수 있습니다. – Bozho

답변

0

왜 스프링의 양식 태그 라이브러리를 사용하지 않습니까? http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/view.html#view-jsp-formtaglib

taglib (컨트롤러와 함께)는 ModelAttribute를 자동으로 매핑합니다. 양식에 대한 GET 요청을 할 때 PostRequest의 새로운 (아마도 비어있는) 객체를 만들고 그것을 모델에 집어 넣으십시오. POST 후 form spring은 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> 
+0

오리건 포스터가 'userName = foo'대신 'user_name = foo' 밑줄을 사용하여 매개 변수를 보내는 임의의 클라이언트에 대해 말하기 때문에 Sping 양식 태그 라이브러리가 도움이되지 않을 수 있습니다. 귀하의 경우에는 클라이언트 (JSP)를 제어해야합니다. – andih

+0

오, 오케이 - 나는 그런 식으로 읽지 않았다. ViewController를 제어 할 수 있지만 View 자체는 제어하지 않는 것이 조금 이상합니다. – dilino

+0

내 경우에는 클라이언트가 이미 야생 상태이므로 기존 사양을 기반으로 REST API를 구현해야합니다. HTML 형식의보기도 없지만 응답은 클라이언트의 승인 헤더에 따라 자동으로 매핑됩니다. – rurouni

관련 문제