JaeWon's Devlog
article thumbnail
반응형

Gson 라이브러리를 통해서 Json String을 VO로 파싱하는 도중 아래와 같은 에러가 발생하였다.

java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 4 column 10 path $.items
	at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:351) ~[gson-2.8.6.jar:na]
	at com.google.gson.internal.bind.ArrayTypeAdapter.read(ArrayTypeAdapter.java:70) ~[gson-2.8.6.jar:na]
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131) ~[gson-2.8.6.jar:na]
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222) ~[gson-2.8.6.jar:na]
	at com.google.gson.Gson.fromJson(Gson.java:932) ~[gson-2.8.6.jar:na]
	at com.google.gson.Gson.fromJson(Gson.java:897) ~[gson-2.8.6.jar:na]
	at com.google.gson.Gson.fromJson(Gson.java:846) ~[gson-2.8.6.jar:na]
	at com.google.gson.Gson.fromJson(Gson.java:817) ~[gson-2.8.6.jar:na]
	at com.study.jaewonstudy.webservice.web.json.controller.JsonRestcontroller.getJson(JsonRestcontroller.java:79) ~[classes/:na]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_201]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_201]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_201]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_201]

 

1. 에러 발생 상황

API를 통해 Json 형태로 데이터를 주고 받으면서, 데이터 파싱 도중 발생.

  • 실패 Json
{
	"header": "Json Parsing",
	"items": {
		"id": "Json"
	}
}
  • 파싱 VO
@Getter
@Setter
@ToString
public class GetJsonModel {

    private String header;
    private GetJsonItemsModel[] items;
}

 

1-1. 원인

VO는 List(리스트)로 받아야하는 파라미터가 있었지만, 파싱하고자 하는 Json String 에서는 List 형태가 아니기 때문에 발생.

 

2. 에러 발생시 해결법

받고자 하는 Json의 데이터 구조를 수정해야한다.(List 형식으로 전달)

  • 정상 Json
{
	"header": "Json Parsing",
	"items": [
    	{
			"id": "Json"
		},
		{
			"id": "Parsing"
		}
	]
}

만약, Json의 데이터가 List 형식이 아니라면 VO를  List가 아닌 다른 타입(String etc..)의 형태로 수정한다.

반응형
profile

JaeWon's Devlog

@Wonol

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!