빵구의 개발 메꾸기

Expected a string but was BEGIN_ARRAY 에러 해결 본문

BACK-END/JAVA

Expected a string but was BEGIN_ARRAY 에러 해결

bkjo94 2022. 5. 26. 22:25

Java 파일에서 gson 라이브러리를 사용하던 중 다음과 같은 에러가 발생했다.

Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected a string but was BEGIN_ARRAY at line 1 column 47 path $.

오류 발생 과정과 해결 방법을 알아보자.

 

 

 

<오류 발생 과정>

① User Object와 Animal Object를 여러개 만들고 property들에 대해 set한 뒤 User Object의 animals property에

    넣어준다.

② User 객체를 String 형태의 JSON으로 변환해준다.

③ 변환 된 User 객체 데이터가 담긴 String 형태의 JSON을 Map으로 변환해준다.

User 객체를 String 형태의 JSON으로 변환한 것은 console에 잘 출력이 되었으나 String 형태의 JSON을 Map으로 

    변환한 부분은 에러가 발생했다.

    Expected a string but was BEGIN_ARRAY 에러에 대해 해석해보면 문자열을 기대했지만 배열이 들어있다는

    내용이다.

    현재 Map으로 변환 시킬 때 Map의 generic을 보면 Map<String, String>이다.

 

 

<해결 방법>

① User Object와 Animal Object를 여러개 만들고 property들에 대해 set한 뒤 User Object의 animals property에

    넣어준다.

② User 객체를 String 형태의 JSON으로 변환해준다.

③ 변환 된 User 객체 데이터가 담긴 String 형태의 JSON을 Map으로 변환해준다.

④ 아까와는 달리 정상적으로 에러없이 console에 잘 출력된 것을 볼 수 있다.

    user에 animals 배열 데이터가 담겨있기 때문에 map으로 변환시킬 때 generic을 Map<String, String>으로 하면

    에러가 발생한다.

    따라서 Map<String, Object>로 해주면 에러가 해결된다.

 

Comments