2014-09-29 3 views
1

간단히 말해 요청의 일부로 전송되는 모든 매개 변수를 사용자 정의 클래스에 매핑하려고합니다.모든 요청 매개 변수를 클래스 객체로 매핑

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{ 
    request.getParameter("a"); 
    request.getParameter("b"); 
} 

을하지만 위에서 언급 한 바와 같이, 나는 모든 매개 변수는 클래스에로드 할 싶습니다

custom.class 지금

public class data 
{ 
    private String a; 
    private String b; 

    public String GetA() 
    { 
     return this.a; 
    } 

    public String SetA(String a) 
    { 
     this.a = a; 
    } 

    public String GetB() 
    { 
     return this.a; 
    } 

    public String SetB(String b) 
    { 
     this.b = b; 
    } 
} 

나는 다음과 같은 매개 변수에 액세스 할 수 있습니다 목적.

매개 변수를지도 개체로 변환 한 다음지도 개체에서 가져 오는 모든 값을 사용하여 클래스 개체를 어떻게 든 평가할 수있는 최선의 방법이라고 생각합니다. 그러나 어떻게 이런 일이 생길지 모릅니다.

누군가가 문서 작성을 가르쳐 주거나이 작업을 어떻게 수행 할 수 있는지 알려 주시면 감사하겠습니다.

저의 영어를 유감으로 생각합니다. 사전에

감사합니다, 알렉스 이미 맵으로 매개 변수를 얻기를위한 HttpRequest의 방법은 당신이 사용할 수 this 일이며,이

+0

왜이 작업을 수행 하시겠습니까? 이미 요청 객체에 매핑되어 있습니다. – ControlAltDel

+0

요청 매개 변수 (IMHO)의 값에 액세스하는 방법이 맘에 들지 않습니다. 별도의 객체에서 사용하는 것이 더 실용적입니다. (하지만 분명히 그렇게 효율적이지는 않습니다.) 모든 매개 변수가 단일 Map 객체'Map reqMap = request.getParameterMap();'에 적용되었다고 가정 해 봅시다. "a"매개 변수의 값을 정확히 얻으려면 어떻게해야합니까? – Wracker

+0

데이터 바인딩을 검색하면 spring mvc 실현을 볼 수 있습니다. [데이터 바인딩 예제] (http://www.tutorialspring.com/spring/spring_mvc_form_handling_example.htm) – Fire

답변

1

? 당신은 매개 변수 맵을 반복하고 B 매개 변수와 같은을 내가 당신을 잘 이해한다면, 당신은 당신의 데이터 클래스의 생성자를해야

YourDataClass data = new YourDataClass(); 
    Map<String, String[]> map = request.getParameterMap(); 
    for (Map.Entry<String, String[]> entry : map.entrySet()) { 
     // do whatever you need 
     data.addParam(entry.getKey(), entry.getValue()); 
    } 
+0

나는 매개 변수에 액세스하는 방법을 알고, 나는 모든 매개 변수의 값을 사용자 정의 클래스로 가져 오는 것을 생각하고 있었다. – Wracker

+0

@Wracker 잘 이해하는지 모르겠지만 예제를 추가했습니다. 업데이트 된 답변을 참조하십시오. –

+0

"addParam"함수의 모든 매개 변수를 동적으로 매핑 /로드하려고하는 방법에 대해 잘 모르겠습니다. – Wracker

0

각 항목에 대해 사용자 정의 클래스를 채울 수 :

public data(String aa, String bb){ 
    a = aa; 
    b = bb; 
} 

그럼 당신은() 메서드 당신의 doPost에 생성자를 호출 할 수 있습니다 :이 조금 오래 알고

data d = new data(request.getParameter("a"), request.getParameter("b")); 
1

,하지만 난 그래서 오히려 간단한 내놓았다있는 비슷한 문제에 발견 용감하다.

내 접근 방식은 google gson 구현을 사용하여 간단한 문자열 속성을 가진 Json 객체를 얻은 다음 선택한 객체 (다시 gson)로 파싱 할 수 있습니다. 생성 된 Json 객체의 키 - 값 쌍을 객체에 매핑합니다 (존재하는 경우). 그래서 실제로는 매우 다재 다능하고 자체 제작 된 속성 - 속성 매핑이없는 모든 종류의 객체에 맞출 수 있습니다.

그냥 당신이 당신의 요청 매개 변수를 포장 할 대상 객체를 가지고 가정의하자, 즉 다음과 같은 :

public class RequestInfo { 
    private String a; 
    private String b; 

    public RequestInfo() { 
    } 

    public String getA() { 
     return a; 
    } 

    public void setA(String a) { 
     this.a = a; 
    } 

    public String getB() { 
     return b; 
    } 

    public void setB(String b) { 
     this.b = b; 
    } 
} 

당신의 HttpServletRequest의 키와 값을 포함하는이 멋진 매개 변수지도가 있습니다. 값은 문자열 배열입니다. 실제로 그 이유를 말할 수는 없지만 제 경우에는 하나의 가능한 값만 갖는 모든 속성을 가정합니다. 따라서이 속성의 첫 번째 항목 만 사용하는 것입니다. 아이디어는 간단합니다. 빈 Json 객체를 만들고 매개 변수 맵을 반복하고 Json 객체 내에 키 - 값 쌍을 만듭니다.이제 살펴 보자 :

// create an empty json object 
JsonObject requestJson = new JsonObject(); 
// iterate over all the paramters 
for (Map.Entry<String, String[]> entry : request.getParameterMap().entrySet()) { 
    // add every item as a property to the json 
    requestJson.addProperty(entry.getKey(), entry.getValue()[0]); 
} 

지금 당신이 String 형의 키 - 값 쌍으로 매핑 된 모든 요청 매개 변수와 정말 간단한 JSON 객체를 가지고있다. 마지막으로, gson이이 오브젝트를 자신의 표현으로 구문 분석하도록하십시오. 한 줄의 코드, 그 이상 :

이제 모든 일치하는 매개 변수가 자신의 개체로 구문 분석됩니다. Gson은 다른 Object 유형을 인식하고 올바르게 파싱 할 수 있습니다. 따라서 우리는 Json 객체에서 String key-value-pairs만을 생성 할지라도, gson은 그러한 객체를 지정한 경우 Integer, Longs 등으로 구문 분석 할 수 있습니다.

요청 정보 개체가 변경되면 추가 알고리즘, if-else 구조 또는 업데이트 된 생성자로 일치 알고리즘을 업데이트 할 필요가 없습니다. gson이이를 처리합니다. 그리고 매핑하려는 요청의 유형이 다른 경우 동일한 알고리즘을 사용할 수 있습니다. fromJson 호출에서 클래스 정의를 업데이트하기 만하면됩니다.

희망이 있으면 도움이됩니다.

관련 문제