해결된 질문
작성
·
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);를 사용하는 경우에는 해당 코드를 명기해주어야 합니다.
감사합니다.
아 그런 이유가 있었군요 :] 감사합니다 !