코드를 작성하다가 HttpHeaders에 필요한 정보를 add 해주어야 하는 경우가 있었다.
import를 잘못 해주는 바람에 오류가 났었는데, 그 때문에 spring에서 사용하는 HttpHeaders 말고 다른 것이 있다는 것도 발견하게 되었다.
Java.net을 이용하여 http 통신을 하는 방법이다.
Stream을 받은 후에, Reader로 읽어 오는 방식으로 사용할 수 있다고 한다.
spring을 이용하여 http 통신을 하는 방법이다.
나는 spring을 사용하여 코드를 작성하고 있으니, 앞으로도 springframework.http을 import 하여 사용하면 되는 듯 하다 !
Map이라는 자료구조는 Key와 Value의 한 쌍으로 이루어져 있다.
HashMap | TreeMap | LinkedHashMap |
---|---|---|
중복 키가 존재하지 않는다 | 중복 키가 존재하지 않는다 | 중복 키가 존재하지 않는다 |
Map에 있는 데이터를 가져올 때, Key를 인덱스처럼 가져와 Value를 뽑기 때문에 시간복잡도가 O(1)이다 | Map에 있는 데이터를 가져올 때, Key를 인덱스처럼 가져와 Value를 뽑기 때문에 시간복잡도가 O(1)이다 | Map에 있는 데이터를 가져올 때, Key를 인덱스처럼 가져와 Value를 뽑기 때문에 시간복잡도가 O(1)이다 |
데이터가 들어올 때마다 Key 값에 따라 자동으로 정렬된다 | 데이터가 들어올 때마다 Key 값에 따라 자동으로 정렬된다 | |
입력 순서를 보장한다 |
앞서 살펴본 Map의 종류들은 중복 Key가 존재하지 않았다. 즉 Key의 중복을 허용하지 않았다.
MultiValueMap의 경우에는 중복 Key를 허용한다.
데이터를 가져올 때, Key에 따른 Value들을 List의 형태로 반환한다.
LinkedMultiValueMap 역시, 순서를 보장하는 MultiValueMap의 종류이다.
java.lang.NullPointerException:
Cannot invoke "com.fasterxml.jackson.databind.JsonNode.asText()"
because the return value of
"com.fasterxml.jackson.databind.JsonNode.get(String)"
is null at com.sparta.myselectshop.service.KakaoService
.getKakaoUserInfo(KakaoService.java:114) ~[main/:na]
at ...
하여튼 차분히 넘어가는 경우가 없다 ..
꼭 이렇게 사건을 만들까나 ㅠㅠ
NullPointerException이 발생했다.
어느 곳에서 오류가 발생했는지 바로 확인했는데, 결론은 내가 원하는 값이 null이기 때문에 받아올 수 없다는 오류였다.
메소드명이나, 필드명에서 실수를 했나 싶어서 다시 읽어보았지만
잘못 작성한 것이 없었다.
찬찬히 오류 내용을 다시 살펴보니, email에서 null이 발생하고 있었다.
처음에 카카오에서 로그인을 할 때, 필수 사항과 선택 사항 동의가 있었는데, 습관처럼 이메일 선택은 해제하는 바람에 그랬나 ..? 싶었는데 아무래도 그게 맞았던 것 같았다.
그래서 일단 웹사이트의 쿠키를 몇 번이고 지우고 다시 시도해봤으나 소용이 없었다..
이런 경우에는, 본인이 로그인 한 카카오 계정에 들어가서
설정 - 카카오 계정 - 계정 연결 탭의 연결된 서비스 에 들어가
새롭게 로그인 된 외부 서비스에 들어가서, 연결을 끊으면 된다.
그 후에 다시 로그인을 시도하면 원래대로 동의할 수 있는 창이 뜨게 된다.
이메일에 동의를 해주고 나서 다시 실행하니, nullpointerexception이 발생하지 않았다.
email에 동의를 하지 않으면, 사용자에 대해서 정말 email에 대한 정보를 가져올 수 없다는 점을 직접 확인해 볼 수 있었다.
만약 나처럼 email에 대한 선택 동의를 하지 않은 사람의 경우라면, 시스템 상에서 NullPointerException이 발생할 수 있으므로, 이런 경우에 대한 예외 처리를 꼭 해두어야 할 것 같다.