일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 스프링
- bcrypt
- AWS
- 유니티
- 백준
- jwt
- oAuth
- IntelliJ
- react
- 깃
- OAuth2.0
- RiotAPI
- unity
- node.js
- 프로그래밍
- spring
- 스프링부트
- 게임개발
- express
- JSON
- 게임
- c#
- 파이썬
- Python
- frontend
- 백엔드
- 코딩
- springboot
- netlify
- MongoDB
- Today
- Total
Unwound Developer
스프링 "empty": false 오류 본문
DB에서 JSON형태로 데이터를 받아오고, 서버는 JSON 배열 형태로 받습니다.
서버가 그 JSON 배열을 클라이언트에게 다시 넘겨줍니다.
위는 별글 프로젝트에서 Get요청을 처리하는 방법입니다.
코드는 다음과 같습니다.
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:포트번호/스키마이름","아이디","비밀번호"
);
PreparedStatement ps = conn.prepareStatement(
"SELECT * FROM user_tb"
);
// 데이터베이스와 연결
ResultSet rs = ps.executeQuery();
// rs는 ResultSet 형태로써 위 sql구문의 결과값을 저장하고 있음
JSONArray jarr = new JSONArray();
// 빈 JSON배열 선언
while(rs.next()){
JSONObject obj = new JSONObject(); // 빈 JSON객체 선언
String user_id = rs.getString("user_id");
String name = rs.getString("name");
String password = rs.getString("password");
Date birthday = rs.getDate("birthday");
String email = rs.getString("email");
String phone_num = rs.getString("phone_num");
String nickname = rs.getString("nickname");
String tier = rs.getString("tier");
Date since_from = rs.getDate("since_from");
String id = rs.getString("id");
// rs에 저장되어있던 결과값들을 각 인덱스 별로 받아옴
obj.put("user_id",user_id);
obj.put("name",name);
obj.put("password",password);
obj.put("birthday",birthday);
obj.put("email",email);
obj.put("phone_num",phone_num);
obj.put("nickname",nickname);
obj.put("tier",tier);
obj.put("since_from",since_from);
obj.put("id",id);
// 받아온 결과물을 빈 JSON객체에 할당
jarr.put(obj);
// 위에서 만든 JSON객체를 JSON배열에 Put
}
rs.close();
ps.close();
conn.close();
return jarr; // 컨트롤러에 JSON 배열 반환, 컨트롤러는 다시 클라이언트로 반환
}
위의 방식은 ResultSet으로 받아온 결과물을 while(rs.next())를 통해 모든 결과를 JSON객체로 하나하나 만들고
만든 JSON객체를 다시금 JSON 배열로 만드는 과정입니다.
JSON이 아닌 ResultSet형태는 데이터 가공,관리 등 다루기가 불편해서 JSON형태로 바꿨습니다.
JSON배열을 서버에서 출력해보면 다음과같이 잘 나옵니다.
user.getName() 이 UserDao에서 위의 메소드를 실행하는 부분입니다.
그런데, Postman을 통해 클라이언트에서 로그를 찍어보니 JSON배열이 출력이 안되고 이렇게만 뜹니다.
이게 포스트맨에서만 생기는 오류인지는 모르겠지만 일단은 클라이언트 쪽으로 넘길 때
데이터의 형태가 문제인 것 같습니다.
JSONArray라는 형식으로 포스트맨에 반환했는데, 기존에 사용하던 JSON이랑 형식이 달라서
자바에서만 읽을 수 있고 포스트맨에서 못 읽는가 싶어 다음과 같이 형태를 바꿔봤습니다.
그냥 JSONArray를 다시 List 형태로 바꿔서 반환하는 형태로 바꾼거에요.
JSONArray변수.toList()만 하면 List형으로 바꿔졌습니다.
List로 형식을 바꾸니 포스트맨에서 보입니다.
이게 JSON오브젝트 배열이아니라 List라서 보이기만 저렇게보이고, 오브젝트로써 데이터를 다룰 수 있는지는 클라이언트에서 확인을 해봐야겠습니다.
저 empty:false 오류에 대한 정보가 별로 없더라구요.
오류의 원인도 잘 모르겠고, 이게 맞는 해결법인진 모르겠지만 일단 포스트맨에서는 올바르게 보이니
스프링에서 API를 만들땐 우선 이 방식으로 만들어보려합니다.
'Web > Spring' 카테고리의 다른 글
스프링 - DTO (0) | 2023.01.24 |
---|---|
스프링 기초지식 - 템플릿엔진, 빌드도구 (0) | 2023.01.09 |
스프링 mysql 연결과 @RequestBody로 JSON 받기/넘겨주기 (0) | 2022.12.20 |
별글 프로젝트 - WBS, ERD 설계와 Restful API (0) | 2022.12.12 |
Spring - mvc패턴과 Controller, Mapping (0) | 2022.12.08 |