아무거나

결과값 리턴값이 String 인 경우 한글이 깨지는 현상 (설정 파일에서 인코딩을 지정해도 안될 경우) 본문

Java/Spring

결과값 리턴값이 String 인 경우 한글이 깨지는 현상 (설정 파일에서 인코딩을 지정해도 안될 경우)

전봉근 2022. 4. 26. 23:37
반응형

결과값 리턴값이 String 인 경우 한글이 깨지는 현상 (설정 파일에서 인코딩을 지정해도 안될 경우)

  • 원인은 HTTP 메소드 컨버터의 StringHttpMessageConverter 에서 기본 옵션 ISO-8859-1을 발견

  • 해결방법
    • String 이 아닌 다른 값으로 가공 (굳이 String 이 아닌 Response Model 클래스를 따로 만들어서 리턴하였음)
    • WebConfig 의 configureMessageConverters 오버라이딩하여 converter.setWriteAcceptCharset(false); 로 변경 
    • @Configuration public class WebMvcConfig extends WebMvcConfigurerAdapter { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { StringHttpMessageConverter converter = new StringHttpMessageConverter(StandardCharsets.UTF_8); converter.setWriteAcceptCharset(false); //이거 설정 안하면 Accept-Charset에 대다수의 Encoding Type 리턴함 converters.add(converter); super.configureMessageConverters(converters); } }
    • 우선순위가 가장 높은 ContentType 에 캐릭터셋 명시
      HttpHeaders headers = new HttpHeaders(); 
      headers.setContentType(MediaType.valueOf("application/json;charset=EUC-KR"); 
      HttpEntity entity = new HttpEntity<>(content, headers); 
      
      RestTemplate restTemplate = new RestTemplate(); 
      restTemplate.exchange(apiUrl, HttpMethod.POST, entity, Response.class);      
      
반응형
Comments