본문 바로가기

개발공부

JavaSpring @RequestHeader 사용시 주의점

문제 사항

프로젝트에서 요청받은 전체 Header 정보가 필요했다. JavaSpring에서 지원해 주는 @RequestHeader를 통해 전체 Header 정보를 HashMap에 담아 사용을 했다. 로컬 서버를 돌려 기능 테스트 해보니 정상적으로 HashMap에서 Header 정보를 가져오지 못하고 있었다.

 

✔ 이유

Header의 key값이 잘못 되었던 것이었다. AWS CF에서 전달해 주는 Header를 명세를 확인하고 정확히 입력을 했는데도 불구하고 실제 출력해 보니 대문자, 소문자 차이가 있었던 것이다. 

 

✔ HttpServletRequest.getHeader는 정상적으로 돌아갔던 이유

그동안 사용했던 HttpServletRequest.getHeader는 대소문자 구분 없이 정상적으로 돌아갔다. 그래서 왜 이것이 가능한지 확인을 하고 현재 HashMap에 담겨있는 Header에도 적용을 해보기로 했다.

public boolean equalsIgnoreCase(String s)​


HttpServletRequest.getHeader 내부에서는 key값을 비교를 할 때 대소문자 구분 없이 비교를 할 수 있는 equalsIgnoreCase를 사용을 하고 있었다. 그래서 그동안 사용할 때 대소문자 상관없이 정상적으로 Header값들을 가져올 수 있었던 것이다.

 

✔ 해결하기

Header를 HashMap으로 가져와서 각 Header 정보를 가져오려면, 위와 같이 대소문자 구분 없이 비교를 하면되었다. 그런데 별도의 구현을 하기보다는 기존에 있는 메서드를 사용하기로 했다.