2016-10-26 3 views
1

간단한 @RestController이 있고 GET 쿼리의 값을 보유하는 요청 개체를 만들고 싶습니다.spring @RestController Servlet에서 get query 매개 변수 이름을 설정하는 방법?

또한 변수 이름을 get query 매개 변수 이름과 다르게 사용하고 싶습니다.

@RestController 
public class MyServlet { 
    @RequestMapping(value = "/start") 
    public String start(@Valid MyRequest req) { 
       Logger.log("IN"); 
     return req.getTest(); 
    } 
} 

public class MyRequest { 
    @XmlElement(name = "asd") 
    private String test; 

    //getter, setter 
} 

요청 : localhost:8080/start?asd=imhere

결과 : 내가 로그 문 IN을 seing, 그래서 서블릿이 작동합니다. BUT req 매개 변수가 null입니다. 왜?

다음 URL을 보내면 작동합니다. localhost:8080/start?test=imhere 그래서 서블릿은 작동하지만 매개 변수 이름은 변경되지 않습니다.

답변

0

스프링은 세터를 사용하거나 전용 변수에 반영하여 MyRequest 개체를 만들려고하므로 test 변수는 test 매개 변수를 보낼 때만 채워집니다. documentation (@RequestMapping - Supported method argument types)에서

:

명령 또는 양식 개체가 ... 필드에 직접 콩 (세터를 통해) 속성 하거나

편집을 요청 매개 변수를 결합하는 - 당신이 변경하려는 경우 이름은 변환기가 필요할 것입니다. 참조 :

  1. docs
  2. mvc example
+0

내가 알고, 질문은 : 어떻게이 힘 스프링을 변경할 수 있습니다 다른 매개 변수 이름을 해결하기 위해? – membersound

+0

죄송합니다. 지난 질문에 '왜?'라고 대답했습니다. 나는 자동적 인 방법이 있다고 생각하지 않는다. 아마 내가 생각하기에 타입 변환기를 사용할 필요가있을 것이다. [여기] (http://unitstep.net/blog/2013/04/07/spring-mvc-request-parameter-conversion-with-minimal-configuration/)와 같은 것이 유용하게 보입니다. – slc84

+0

흠 나는 어노테이션 기반 방식이 있다고 생각했다. – membersound