Study/Java
JSON Object 생성 시 한글 (???) 깨지는 현상 해결
kahaha
2023. 3. 22. 19:55
스프링 시큐리티 로그인 시 출력값에 대한 작업중 objectMapper.writeValueAsString()로 변환했을때 한글로 입력한 name이 ???로 출력되는것을 확인하였다.
writeValueAsString 도입이후 발생한 인코딩문제로 확인하였으며 이에 대한 해결 방안을 찾아본 결과
다음과 같은 코드를 추가해주면 해결된다.
//HttpServletResponse response
response.setCharacterEncoding("UTF-8"); // objectMapper.writeValueAsString 한글깨지는 것에 대한 대응코드
메서드 전체코드
public class MemberAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
@Override
public void onAuthenticationSuccess(HttpServletRequest request,
HttpServletResponse response, //<- 적용할 파라미터
Authentication authentication) throws IOException, ServletException {
Member member = (Member) authentication.getPrincipal();
response.setCharacterEncoding("UTF-8"); // objectMapper.writeValueAsString 한글깨지는 것에 대한 대응코드
/*MemberDetails에서 유저정보를 가져와서 리스폰스에 뿌려주는 부분*/
Map<String, Object> loginResponse = new HashMap<>();
loginResponse.put("memberId", member.getMemberId());
loginResponse.put("email", member.getEmail());
loginResponse.put("roles", member.getRoles());
loginResponse.put("level", member.getLevel().getLevel());
loginResponse.put("name", member.getName());
ObjectMapper objectMapper = new ObjectMapper();
String responseBody = objectMapper.writeValueAsString(loginResponse);
response.setContentType(MediaType.APPLICATION_JSON_VALUE);
response.getWriter().write(responseBody);
log.info("# Authenticated successfully");
log.info("name:{}, email: {}, role: {}", member.getName(), member.getEmail(), member.getRoles() );
}
}