인프런 커뮤니티 질문&답변

relate16님의 프로필 이미지
relate16

작성한 질문수

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

소소한 궁금증. response.setCharacterEncoding("utf-8"); 질문

해결된 질문

작성

·

503

2

@Slf4j
public class UserHandlerExceptionResolver implements HandlerExceptionResolver {

private final ObjectMapper objectMapper = new ObjectMapper();

@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
try {
if (ex instanceof UserException) {

log.info("UserException resolver to 400");
String acceptHeader = request.getHeader("accept");
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);

if ("application/json".equals(acceptHeader)) {

Map<String, Object> errorResult = new HashMap<>();
errorResult.put("ex", ex.getClass());
errorResult.put("message", ex.getMessage());

String result = objectMapper.writeValueAsString(errorResult);

response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
response.getWriter().write(result);

return new ModelAndView();
} else {
//TEXT/HTML
return new ModelAndView("error/500");
}
}
} catch (IOException e) {
log.error("resolver ex", e);
}
return null;
}
}

mvc 1편에서 

ContentType : application/json은 

원래 utf-8을 쓰게 되어 있어서 

charset=utf-8

즉, 

response.setCharacterEncoding("utf-8"); 는

의미 없는 파라미터가 추가되는 것이라고 하셨는데

 

여기서 response.setCharacterEncoding("utf-8"); 코드를  쓴 다른 이유가 있는 건가요 ? 

 

 

 

 

 

답변 1

2

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. relate16님

저도 정확한 이유는 모르겠지만, 톰켓이 이 부분에 있어서 레거시 코드들이 있는 것 같아요.

그래서 response.getWriter().write(result);를 사용하는 경우에는 해당 코드를 명기해주어야 합니다.

감사합니다.

relate16님의 프로필 이미지
relate16
질문자

아 그런 이유가 있었군요 :] 감사합니다 ! 

relate16님의 프로필 이미지
relate16

작성한 질문수

질문하기