※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 방식)로 되어있는지 확인 해볼것.