2013-10-17 2 views
0

AJAX 요청에서 POST 데이터를 받아들이는 서블릿을 작성 중입니다. 여기 String string = request.getParameter ("data") is null

내가 클라이언트에서 보내는 코드입니다 :

$.ajax({ 
      type: "POST", 
      url: "urlservlet", 
      data: "{type:'" + "country" + 
      "', country:'" + $('#country').val() + 
      "'}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function(response) { 

      } 


그리고 이것은 서블릿 코드 :

protected void doPost(HttpServletRequest request, HttpServletResponse response) 
         throws ServletException, IOException { 
    string test = request.getParameter("type"); 
} 

그러나 것은 항상 null에 동일한 종류를 얻을 수있다. 나는 이유를 모른다.

친절히 도와주세요.

+0

당신의 제목은'getP (data)'라고 말하고 코드는'getP (type)'라고합니다. 실제 문제는 무엇입니까? – SudoRahul

답변

5

요청 본문에 JSON을 쓰고 요청 매개 변수가 필요합니다. javadoc에서 :

문자열, 또는 매개 변수가 존재하지 않는 경우는 null로 요청 매개 변수의 값을 돌려줍니다. 요청 매개 변수는 요청과 함께 전송 된 추가 정보입니다 ( ). HTTP 서블릿의 경우 매개 변수는 쿼리 문자열 또는 게시 된 양식 데이터 에 포함됩니다.

양식 데이터를 게시하지 않았으며 쿼리 문자열이 없습니다.

원하는 것은 HtppServletRequest#getInputStream()으로 HTTP 요청 본문을 읽고 JSON을 구문 분석하여 요소를 추출하는 것입니다.

+0

오케이. 더 자세히 설명해주세요. 부디. :) –

+0

@ 펩시 어떤 주제에 정교하게? 내 답변에는 원하는 키워드를 찾는 데 도움이되는 키워드가 있습니다. –

+0

감사합니다, 시간을내어 감사드립니다. 샘플 코드에 대해 묻는 것입니다. :) 자바를 처음 접했을 때부터 –

2

문제는 @Sotirios가 설명합니다. 그러나 서버 측에서 Java REST 프레임 워크를 사용하여 RESTEasy, Spring MVC 또는 Restlet과 같이 해결할 수 있습니다. Servlet API의 하위 수준 세부 정보가 아닌 비즈니스 논리에 집중할 수 있도록 추상화를 사용하는 것이 좋습니다.

JSON을 구문 분석하는 저수준 세부 정보를 다루지 않으려면 Jackson과 같은 JSON 시리얼 라이저/디시리얼라이저를 사용하십시오. Jackson과 그 대안은 제가 언급 한 REST 프레임 워크와 완벽하게 통합됩니다.

나는 좋은 추상화를 좋아한다.

관련 문제