http://helols.tistory.com/397 참조하시면 될것 같습니다.
MappingJacksonHttpMessageConverter 이거는 default 가 utf-8 이네요.
On 3월9일, 오전11시30분, 고종봉 <mercujj...@gmail.com> wrote:
> 안녕하세요? 날씨가 많이 풀리고 있죠?ㅎ
>
> 제목 그대로,, 스프링 RestTemplate에 Content-Type을 설정 하는 방법을 문의드립니다.
>
> String result = restTemplate.postForObject(URI.create("http://localhost:9000/provider/rest/post.do"), "<DATA>POST 한글</DATA>",
> String.class);
>
> 이렇게 보내면,
>
> POST /provider/rest/post.do HTTP/1.1
> Accept: text/plain, */*
> Content-Type: text/plain;*charset=ISO-8859-1*
--
Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에 게시하려면 ks...@googlegroups.com(으)로 이메일을 보내세요.
그룹에서 탈퇴하려면 ksug+uns...@googlegroups.com로 이메일을 보내주세요.
더 많은 옵션을 보려면 http://groups.google.com/group/ksug?hl=ko에서 그룹을 방문하세요.
메세지 전송하는거는 컨버터들 통해서 하는데 ..
컨버터에 보면 세팅하는게 있어욤~
On 2011. 3. 8., at 오후 6:30, 고종봉 wrote:
> restTemplate.postForObject
Thanks!
Im Yoon!!
helol...@gmail.com
휴우.. 땀 나네요..답변 달아 주신 분들 감사합니다. ^^;답변 주신 힌트를 근거로 소스를 분석해봤는데요,디버깅해본 결과 세원님이 말씀하신 것처럼 StringHttpMessageConverter에서 매칭되서 컨버팅이 수행됩니다.그런데,, 여기서 문제가..해당 컨버터를 개발한 담당자들의 캐릭터셋에 대한 배려가 부족해서인지,, "ISO-8859-1"을 디폴트로 박아놨더군요..그리고 수정할 수 있는 여지도 제공하지 않은 것 같구요..아래는 해당 소스 부분입니다.
public class StringHttpMessageConverter extends AbstractHttpMessageConverter<String> {public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");private final List<Charset> availableCharsets;public StringHttpMessageConverter() {super(new MediaType("text", "plain", DEFAULT_CHARSET), MediaType.ALL);this.availableCharsets = new ArrayList<Charset>(Charset.availableCharsets().values());}..setCharset() 비스므리한 것도 없습니다...FormHttpMessageConverter의 경우에도, API 문서에는 setCharset(Charset)이 정의되어 있는데,, 소스에는 없습니다. 헉~!!결과적으로 현재 제가 소스를 파악해본 바로는,, java.lang.String 타입인 경우에는 기본적으로 "ISO-8859-1" 캐릭터셋만 먹도로 되어 있기 때문에...ㅠㅠ;;좀더 찾아봐야 겠습니다..
2011년 3월 9일 오전 11:52, Sewon Ann <kin...@gmail.com>님의 말:
자문자답은 아니군요..
결정적 힌트를 제공받았으니ㅎ
감사합니다~!
나의 GalaxyS로부터...
2011년 3월 9일 오후 5:24, 고종봉 <mercu...@gmail.com>님 의 말:
휴우.. 땀 나네요..
답변 달아 주신 분들 감사합니다. ^^;
답변 주신 힌트를 근거로 소스를 분석해봤는데요,
디버깅해본 결과 세원님이 말씀하신 것처럼 StringHttpMessageConverter에서 매칭되서 컨버팅이 수행됩니다.
그런데,, 여기서 문제가..
해당 컨버터를 개발한 담당자들의 캐릭터셋에 대한 배려가 부족해서인지,, "ISO-8859-1"을 디폴트로 박아놨더군요..
그리고 수정할 수 있는 여지도 제공하지 않은 것 같구요..
아래는 해당 소스 부분입니다.
public class StringHttpMessageConverter extends AbstractHttpMessageConverter<String> {
public static final Charset DEFAULT_CHARSET = Charset.forName("ISO-8859-1");
private final List<Charset> availableCharsets;
public StringHttpMessageConverter() {super(new MediaType("text", "plain", DEFAULT_CHARSET), MediaType.ALL);this.availableCharsets = new ArrayList<Charset>(Charset.availableCharsets().values());}..
setCharset() 비스므리한 것도 없습니다...
FormHttpMessageConverter의 경우에도, API 문서에는 setCharset(Charset)이 정의되어 있는데,, 소스에는 없습니다. 헉~!!
결과적으로 현재 제가 소스를 파악해본 바로는,, java.lang.String 타입인 경우에는 기본적으로 "ISO-8859-1" 캐릭터셋만 먹도로 되어 있기 때문에...
ㅠㅠ;;
좀더 찾아봐야 겠습니다..
2011년 3월 9일 오전 11:52, Sewon Ann <kin...@gmail.com>님 의 말:
postForObject() 소스를 봤는데, 결과로 받을 타입이 String.class 일 경우 org.springframework.http.converter.StringHttpMessageConverter 가 담당을 하네요.(RestTemplate,139 line)
근데 소스를 보니 DEFAULT_CHARSET 이 ISO-8859-1 로 되어있습니다.제가 보기엔 이 클래스 자체를 뭔가 수정해서 쓰는 것은 배보다 배꼽이 더 큰 것 같아요.물론 테스트 정도가 아니라 서비스 자체에서 restTemplate 을 쓴다면 그런 경우까지 고려할 수 있겠지만요.
그래서 인코딩 까지 고려하실 경우엔 단순히 <DATA>POST 한글</DATA> 만 보내지 마시고 header 까지 담을 수 있는 HttpEntity 로 만드시는 건 어떨까 생각합니다.HttpEntity(T body, MultiValueMap<String, String> headers) 이런 생성자가 제공됩니다.
따라서 호출이 이런식으로 바뀌겠죠. (정확하진 않습니다.)
MultValueMap headerMap = ... <= 여기에 Content-Type 헤더를 UTF-8로 넣어주기
String result = restTemplate.postForObject(URI.create("http://localhost:9000/provider/rest/post.do"), new HttpEntity( "<DATA>POST 한글</DATA>", headerMap ), String.class);
제가 이렇게 생각한 이유는 RestTemplate 291 line -> 541 line -> HttpEntity 95 line 으로 따라갔기 때문입니다.
2011/3/9 고종봉 <mercu...@gmail.com>
안녕하세요? 날씨가 많이 풀리고 있죠?ㅎ
제목 그대로,, 스프링 RestTemplate에 Content-Type을 설정 하는 방법을 문의드립니다.
String result = restTemplate.postForObject(URI.create("http://localhost:9000/provider/rest/post.do"), "<DATA>POST 한글</DATA>", String.class);
이렇게 보내면,
POST /provider/rest/post.do HTTP/1.1
Accept: text/plain, */*
Content-Type: text/plain;charset=ISO-8859-1
..
이렇게 charset이 기본적으로 ISO-8859-1로 전송되네요.. UTF-8을 사용하고 싶은데,,
어떤 좋은 방법이 있을까요??
--
Google 그룹스 'Korea Spring User Group' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에 게시하려면 ks...@googlegroups.com(으) 로 이메일을 보내세요.
그룹에서 탈퇴하려면 ksug+uns...@googlegroups.com로 이메일을 보내주세요.
더 많은 옵션을 보려면 http://groups.google.com/group/ksug?hl=ko에 서 그룹을 방문하세요.
--
이게 가장 좋은 해법이라고 봅니다.