2009-12-22 7 views
3

http 쿼리에서 "a-b"매개 변수를 받기 위해 "@RequestParam ("a-b ") String foo"를 사용했습니다."a-b"쿼리를 Spring MVC의 커맨드 객체에 매핑하는 방법

이제 Command Object로 전환하고 싶지만이 param을받는 방법을 모르겠습니다. "ab", "aB", "a_b", "a_B"의 4 가지 형식을 시도했지만 둘 다 작동하지 않습니다. 예를 들어, 다음 코드가 발생합니다

로 URL : http://localhost:8080/test1?a-b=1
결과 :

@Controller 
public class TestController { 

@RequestMapping("/test1") 
public String test1(
    Foo foo, 
    HttpServletResponse response 
) throws IOException { 
    response.setContentType("text/plain"); 
    response.getOutputStream().write(foo.toString().getBytes("UTF-8")); 
    return null; 
} 


public static class Foo { 

    private String ab; 
    private String aB; 
    private String a_b; 
    private String a_B; 

    // getter and setter 
    ... 

    @Override 
    public String toString() { 
     return "Foo{" + 
       "ab='" + ab + '\'' + 
       ", aB='" + aB + '\'' + 
       ", a_b='" + a_b + '\'' + 
       ", a_B='" + a_B + '\'' + 
       '}'; 
    } 
} 





} 

답변

1

내가 혼란 스러워요 사전에 Foo{ab='null', aB='null', a_b='null', a_B='null'}

감사합니다 - 당신이 명확하게 요청 매개 변수를 사용하고3210, 그러나 대시없이 대시가 전달되거나 대시가 밑줄로 변환 될 것으로 예상됩니까? 자바는 클래스 필드에 이름에 대시를 사용하게하지 않으며 Spring MVC가 요청 매개 변수 이름에서 대시를 변환하는 마술 같은 방법을 가지고 있지 않다고 생각하므로 요청 매개 변수를 사용하지 않기를 원할 수도 있습니다. 이 방법을 컨트롤러에 전달하는 방법을 사용하려면 대시가 필요합니다. 당신이 당신의 요청 매개 변수라는 이름의이 방법을 가지고있는 경우 관련 분야에 a-b 요청 매개 변수를 매핑하는 봄 설명서의 Customizing WebDataBinder Initialization 섹션에 설명 된대로

, 다음, 다른 옵션은 사용자 정의 WebBindingInitializer을 제공하는 것입니다 Foo 클래스입니다. 이제는 좀 더 자세히 읽었지만 WebBindingInitializers는 바인딩 명령 객체를 지원하지 않을 수도 있습니다 ...

+0

ab는 오래된 API에서 비롯되었으며이 API를 계속 지원해야합니다. 그래서 'ab' 'aB'. 감사합니다. – lidaobing

+0

당신은 이것을 알아 내고, 같은 질문을 여기에 가지고 있습니다. http://stackoverflow.com/questions/20670456/map-post-parameter-with-dash-to-model-in-spring-controller –

관련 문제