2011. 5. 26. 00:50

※Restful 서버는 JAX-RS 구현체 사용.

■ 클라이언트에서 서버의 레스트풀 URL로 POST형태로 호출할 경우 예제 소스.

      HttpClient client = new DefaultHttpClient();
      HttpPost request = new HttpPost("레스트풀 URL");
         
      List<NameValuePair> postParameters = new ArrayList<NameValuePair>();
      postParameters.add(new BasicNameValuePair("userid", userid));
        
      UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters);
      formEntity.setContentType("application/json");
      formEntity.setContentEncoding("UTF-8");
   
      request.setEntity(formEntity);
      HttpResponse response = client.execute(request);  


위와 같이 파라메터를 클라이언트 사이드에서 바인딩 시켰을때 서버 사이드에서

값을 참조하면   "????????" 또는 "%FE%EEFE%DE" 와 같은 형태로 한글 데이터가

손상되게 될경우가 있는데 ServletFilter로 UTF-8을 설정해주고 

URLDecoder.decode("내용값", "UTF-8")로

디코딩 해주어도 변함없이 한글이 손상된 형태로 출력될수도 있다.

■ Solution

★ 클라이언트 - BasicNameValuePair 인스턴스를 생성할 때.

new BasicNameValuePair("userid", userid);

위의 소스코드를 아래와 같이 수정한다.

new BasicNameValuePair("userid", URLEncoder.encode("userid", "UTF-8"));


★ 서버 - 
클라이언트 사이드에서 전송된 정보를

URLDecoder.decode("내용 값", "UTF-8")

과 같이 처리해주면 한글 무사히(?) 출력된다.



※ UrlEncodedFormEntity의 setContentEncoding("UTF-8") 설정으로

해결되는 줄 알았지만 아무 소용이 없다는 것을 알았다.

정확하게 URLEncoder로 인코딩 URLDecoder로 디코딩을

해야 명확하게 값이 나온다.

오늘 하루는 이거 하나땜에 빠이빠이......ㅠㅠ

-----------------  2013.01.29 추가 --------------------

위의 경우 이전에 WAS의 config Encoding 설정이 UTF-8(사용할 Encoding 방식)로 되어있는지 확인 해볼것.

Posted by TIMEC