본문 바로가기
Today I Learned 2024. 5. 28.

(24.05.28)[7주차] void 반환 타입일 때의 response 사용

개인과제를 진행하면서 적응을 하는데도 아직도 많이 적응 되지 않아서 시간이 걸리는게

역랑일 수도!

 

클라이언트에게 직접 JSON 타입으로 Response 을 찾아보는 것만으로도 엄청 시간이 걸려서

블로그에 기록..!


Spring 숙련 개인 과제 주의할 점 정리

 

 

Client에게 출력할 내용 reponse

더보기
// Failure
    @Override
    protected void unsuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response, AuthenticationException failed) throws IOException {
        response.setStatus(HttpStatus.UNAUTHORIZED.value());
        response.setContentType("application/json;charset=UTF-8");
        response.getWriter().write("로그인 실패");
    }

 

 

이슈

  • HTTP상태의 401 상태(UNAUTHORIZED)는 전달이 되지만, "로그인 실패" String 문구가 ??? 로 전달이 되는 문제

원인

  • UsernamePasswordAuthenticationFilter이 구현된 클래스 내애서 @Override 한  메서드이기 때문에 void 타입이라 return을 사용할 수 없음
    • 반환타입을 바꿀 수 없음
  • Client 측에서 응답된 내용=한국어표시가 된 내용이 어떤 형태인지 모르는 상태

해결

  • setStatus는 그 HTTP 상태가 어떤지를 세팅해주는 Response지 텍스트나 JSON으로 응답하는 Reponse가 아니기 때문에 같게 생각하면 안됨
  • Response의 Writer에 의해 쓰여진 "로그인 실패"라는 한국어가 표현되어지기 위해서는 전달되는 것이 어떤 타입인지 명시를 해줘야함
    • 영어일 경우에는 굳이 명시를 하지 않아도 이해를 할 수 있음
    • getWriter은 입력 예외인 IOException을 발생하기 때문에 Throws로 메서드에 throws해줘야함
  • 즉, response일 경우, 한국어 메시지를 위해서는 UTF-8 인코딩을 하기 위해서 콘텐츠 타입 중 charset을 명시해줘야함

 


그래도 덕분에 이를 살려서 다른 곳에서 적용을 할 수 있었기 때문에 수월하게 진행되는 부분이 있었긴 했다.

계속 부족한 점은 적어가면서 기록을 멈추지 않도록!