[SPRING] Google의 Gson을 사용하여 Json을 Java 객체로 변환
SPRINGGoogle의 Gson을 사용하여 Json을 Java 객체로 변환
나는 Spring Social Fql Query를 사용하여 페이스 북에서 데이터를 얻는다. 페이스 북에서 JSON 응답을 받고있다. 내 컨트롤러에서 Json 출력을 얻는 곳이 여기 있습니다.
fql = "SELECT work FROM user WHERE uid = me()";
facebook.fqlOperations().query(fql, new FqlResultMapper<Object>() {
public Object mapObject(FqlResult result) {
List list = (List) result.getObject("work");
for (Object object : list) {
JsonHelper jsonHelper = new JsonHelper();
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String jsonOutput = gson.toJson(object);
System.out.println(jsonOutput);
gson.fromJson(jsonOutput, JsonHelper.class);
}
for 루프 안의 System.out.println 아래와 같이 여러 개의 json을 출력합니다.
{
"employer": {
"id": 129843057436,
"name": "www.metroplots.com"
},
"location": {
"id": 102186159822587,
"name": "Chennai, Tamil Nadu"
},
"position": {
"id": 108480125843293,
"name": "Web Developer"
},
"start_date": "2012-10-01",
"end_date": "2013-05-31"
}
{
"employer": {
"id": 520808381292985,
"name": "Federation of Indian Blood Donor Organizations"
},
"start_date": "0000-00",
"end_date": "0000-00"
}
여기 내 도우미 클래스입니다 :
import java.util.List;
public class JsonHelper {
class Employer{
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class Location{
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class Position{
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//Edited After here
private String start_Date;
private String end_Date;
private Employer employer;
private Location location;
private Position position;
public String getStart_Date() {
return start_Date;
}
public void setStart_Date(String start_Date) {
this.start_Date = start_Date;
}
public String getEnd_Date() {
return end_Date;
}
public void setEnd_Date(String end_Date) {
this.end_Date = end_Date;
}
public Employer getEmployer() {
return employer;
}
public void setEmployer(Employer employer) {
this.employer = employer;
}
public Location getLocation() {
return location;
}
public void setLocation(Location location) {
this.location = location;
}
public Position getPosition() {
return position;
}
public void setPosition(Position position) {
this.position = position;
}
}
자바 객체를 json 객체로 변환하려고 할 때,이 예외가 발생합니다.
HTTP Status 500 - Request processing failed; nested exception is com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 6 column 16
아무도 내가 잘못한 곳에서 나를 도울 수 있습니까? json을 자바 객체로 변환하는 것을 도와주세요. 내 질문은 분명 희망입니다. 미리 감사드립니다.
CONTROLLER로 편집 :
facebook.fqlOperations().query(fql, new FqlResultMapper<Object>() {
public Object mapObject(FqlResult result) {
List<JsonHelper> json = new ArrayList<JsonHelper>();
List list = (List) result.getObject("work");
for (Object object : list) {
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String jsonOutput = gson.toJson(object);
System.out.println(jsonOutput);
JsonHelper jsonHelper = gson.fromJson(jsonOutput, JsonHelper.class);
json.add(jsonHelper);
System.out.println(jsonHelper.getStart_Date());
}
for (JsonHelper jsonHelper : json) {
System.out.println(jsonHelper.getStart_Date());
}
return list;
}
});
해결법
-
==============================
1.이후 실제 API를 액세스하지 못하고있어, 그래서 나는 예제에서 정적 값으로 그것을 시도하고있다. 먼저 JsonHelper 클래스에서 모든 int를 long으로 바꿉니다. json에 언급 된 값은 long 및 String 유형입니다. 그런 다음 아래와 같이 시도하십시오.
이후 실제 API를 액세스하지 못하고있어, 그래서 나는 예제에서 정적 값으로 그것을 시도하고있다. 먼저 JsonHelper 클래스에서 모든 int를 long으로 바꿉니다. json에 언급 된 값은 long 및 String 유형입니다. 그런 다음 아래와 같이 시도하십시오.
String str = "{\n" + " \"employer\": {\n" + " \"id\": 129843057436,\n" + " \"name\": \"www.metroplots.com\"\n" + " },\n" + " \"location\": {\n" + " \"id\": 102186159822587,\n" + " \"name\": \"Chennai, Tamil Nadu\"\n" + " },\n" + " \"position\": {\n" + " \"id\": 108480125843293,\n" + " \"name\": \"Web Developer\"\n" + " },\n" + " \"start_date\": \"2012-10-01\",\n" + " \"end_date\": \"2013-05-31\"\n" + "}"; List<JsonHelper> json = new ArrayList<JsonHelper>(); Gson gson = new Gson(); JsonHelper users = gson.fromJson(str, JsonHelper.class); json.add(users); for (JsonHelper js_obj : json) { System.out.println(js_obj.getEmployer().getId()); System.out.println(js_obj.getEmployer().getName()); }
from https://stackoverflow.com/questions/19629828/converting-json-to-java-objects-using-googles-gson by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] XML 지원을 포함한 스프링 부트 REST (0) | 2019.05.07 |
---|---|
[SPRING] Bean 클래스를 인스턴스화 할 수 없습니다 : 지정된 클래스는 인터페이스입니다. (0) | 2019.05.07 |
[SPRING] Javax 유효성 검사 @NotNull 주석 사용법 (0) | 2019.05.07 |
[SPRING] Spring @Autowired는 Jpa 저장소를 연결할 수 없습니다. (0) | 2019.05.07 |
[SPRING] 봄 MVC - 예기치 않은 쿼리 문자열 매개 변수가 전달 된 확인하는 방법? (0) | 2019.05.07 |