작성
·
318
0
안녕하세요 강사님. 강의 잘 보고 있습니다:)
이번 강의 실습을 진행하는데 문제가 발생하여 질문 올립니다.
전 이상하게도, Accept-Language 를 Header에 포함하지 않고 전송하면 Hello가 response로 옵니다.
강사님이 하신대로 default인 messages.properties안에 'greeting.messages=안녕하세요'라고 설정했음에도 그렇게 답변이 옵니다.
Postman 자체에서 en으로 Accept-Language를 header에 넣어 보내는 것같은데, 그렇게 생각하자니 또 Headers의 숨겨진 헤더 key, value 를 확인해보아도 자동으로 들어가지 않는 것 같습니다. Postman 자체에서 Header 내용을 모두 표시하지 않는 것일까요?
문제 원인과 해결 방법에 대해 어떻게 생각하시는지 여쭙고 싶습니다.
[사용환경]
Ubuntu 20.04 / Postman / intellij
답변 1
0
안녕하세요, 이도원입니다.
Postman에서 전송하는 Header 값을 Java 코드에서 확인해 보시기 바랍니다. 브라우저 또는 Postman과 같은 REST API 테스트 도구에서 이전 정보가 캐쉬로 남아서 전달되는 경우도 있고, 기본 값 정도가 다를 수도 있습니다. 정확하게 Java 코드에서 어떠한 Header 값들이 전달되었는지 확인해 보시고, messages.properties 파일도 정상적으로 등록되었는지 확인해 보실 수 있을까요?
Java 코드에서 Header 값의 확인은
해당 메소드에, HttpServletRequest를 파라미터로 추가하시면, 아래와 같은 코드로 확인해 보실 수 있습니다.
Enumeration<String> headers = request.getHeaderNames();
Collections.list(headers).stream().forEach(name -> {
Enumeration<String> values = request.getHeaders(name);
Collections.list(values).stream().forEach(value -> System.out.println(name + "=" + value));
});
감사합니다.
안녕하세요, 임해경 입니다!
먼저 강사님 말씀대로 header를 print해보았으나, 제가 직접 전달하지 않으면 Accept-Language 값은 전달되지 않았습니다.
직접 전달하지 않았을 때 header는 다음과 같습니다.
user-agent=PostmanRuntime/7.28.0
accept=*/*
cache-control=no-cache
postman-token=<토큰내용>
host=localhost:8088
accept-encoding=gzip, deflate, br
connection=keep-alive
그래서 messages.properties 파일이 정상적으로 등록되었는지 확인하기 위해 messages.properties 외의 다국어파일인 messages_en.properties, messages_fr.properties 를 삭제하고 get 요청을 보내보았습니다.
그렇게 하니 안녕하세요가 정상적으로 출력되었고, 그걸 보아 messages.properties는 잘 등록되는 것 같습니다.
그러나 messages_en.properties, messages_fr.properties 를 다시 추가하면 defualt인 안녕하세요가 오지 않았습니다.
혹시나 싶어 application.yml 파일에 fallback-to-system-locale: false로 지정한 뒤 Accept-Language를 jp로 설정하여 request를 보내보았습니다. 그랬더니 default인 messages.properties가 잘 출력되었습니다.
fallback-to-system-locale: true인 경우에는 Hello가 출력되었습니다.
결론적으로 system locale이 en으로 설정된 것 같은데, 분명 localeResolver에서 강사님이 하신대로 setDefaultLocale(Locale.KOREA)을 작성 했는데 왜 그렇게 되는건지 모르겠습니다 ㅠㅠ
우분투가 한국어가 아닌, 영어로 설정되어있는데 혹시 이 때문일까요? OS 자체 시스템이 영어로 설정되어있어서 자동으로 그렇게 system locale이 설정되기도 하나요?