반응형
실전 프로젝트에서의 Gson 활용은 JSON 데이터를 처리하고 RESTful 웹 서비스를 구축하거나 외부 API 데이터를 효과적으로 파싱하는 데 강력한 도구로 사용됩니다.
간단한 RESTful 웹 서비스 구현
Gson은 RESTful 웹 서비스에서 데이터를 직렬화(Serialize)하거나 역직렬화(Deserialize)하는 데 유용합니다. 다음은 Spring Boot를 사용하여 RESTful 웹 서비스를 구현하는 예제입니다.
import org.springframework.web.bind.annotation.*;
import java.util.*;
@RestController
@RequestMapping("/api/users")
public class UserController {
private List<User> users = new ArrayList<>();
public UserController() {
users.add(new User("김영희", 25, "서울"));
users.add(new User("박철수", 30, "부산"));
}
@GetMapping
public List<User> getAllUsers() {
return users;
}
@PostMapping
public String addUser(@RequestBody User user) {
users.add(user);
return "사용자가 추가되었습니다: " + user.getName();
}
@GetMapping("/{name}")
public User getUser(@PathVariable String name) {
return users.stream()
.filter(user -> user.getName().equals(name))
.findFirst()
.orElse(null);
}
}
class User {
private String name;
private int age;
private String city;
public User(String name, int age, String city) {
this.name = name;
this.age = age;
this.city = city;
}
// Getter & Setter 생략
}
설명
이 코드는 사용자 데이터를 저장하는 간단한 RESTful 서비스입니다. JSON 데이터를 요청 본문에 담아 보내면 사용자 목록에 추가되며, 특정 사용자를 이름으로 검색할 수도 있습니다.
반응형
JSON 파일 읽기/쓰기 예제
Gson은 파일로부터 JSON 데이터를 읽거나 파일에 JSON 데이터를 쓰는 작업을 쉽게 처리할 수 있습니다. 다음은 간단한 예제입니다.
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.io.*;
import java.lang.reflect.Type;
import java.util.*;
class User {
String name;
int age;
String city;
public User(String name, int age, String city) {
this.name = name;
this.age = age;
this.city = city;
}
}
public class JsonFileExample {
public static void main(String[] args) {
Gson gson = new Gson();
String filePath = "users.json";
// JSON 파일 쓰기
List<User> users = Arrays.asList(
new User("이민수", 27, "대구"),
new User("최수진", 22, "광주")
);
try (Writer writer = new FileWriter(filePath)) {
gson.toJson(users, writer);
System.out.println("JSON 파일 저장 완료!");
} catch (IOException e) {
e.printStackTrace();
}
// JSON 파일 읽기
try (Reader reader = new FileReader(filePath)) {
Type listType = new TypeToken<List<User>>() {}.getType();
List<User> userList = gson.fromJson(reader, listType);
userList.forEach(user -> System.out.println(user.name + " - " + user.city));
} catch (IOException e) {
e.printStackTrace();
}
}
}
설명
이 코드는 사용자 데이터를 JSON 형식으로 저장한 후 파일로부터 읽어오는 과정을 보여줍니다. Gson의 TypeToken 클래스를 사용하여 복잡한 제네릭 타입의 데이터를 처리합니다.
외부 API 데이터를 Gson으로 파싱하는 사례
외부 API에서 JSON 데이터를 받아 Gson으로 파싱하여 객체로 변환하는 방법은 다음과 같습니다.
import com.google.gson.Gson;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
class WeatherResponse {
String cityName;
Main main;
class Main {
double temp;
}
}
public class ApiExample {
public static void main(String[] args) {
String apiUrl = "https://api.example.com/weather?city=서울";
Gson gson = new Gson();
try {
URL url = new URL(apiUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
if (conn.getResponseCode() == 200) {
InputStreamReader reader = new InputStreamReader(conn.getInputStream());
WeatherResponse response = gson.fromJson(reader, WeatherResponse.class);
System.out.println("도시: " + response.cityName);
System.out.println("온도: " + response.main.temp);
} else {
System.out.println("API 호출 실패: " + conn.getResponseCode());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
설명
이 코드는 외부 API에서 JSON 데이터를 가져와서 Gson을 활용해 WeatherResponse 객체로 변환한 뒤 데이터를 출력합니다.
Gson 활용 팁
- 대용량 데이터 최적화: 대용량 JSON 데이터를 처리할 때는 Gson의 스트리밍 API를 고려하세요.
- 복잡한 객체 구조 지원: Gson은 중첩된 객체 구조도 손쉽게 처리할 수 있어 REST API와 연동하기 적합합니다.
- 유연한 필드 이름 매핑: @SerializedName 어노테이션을 사용해 JSON 키와 객체 필드 간 매핑을 설정할 수 있습니다.
참고사이트
- Gson 공식 문서: https://github.com/google/gson
- Spring Boot 공식 문서: https://spring.io/projects/spring-boot
- JSONPlaceholder (테스트용 API): https://jsonplaceholder.typicode.com/
반응형
'JAVA' 카테고리의 다른 글
[JAVA] Gson의 확장과 커스터마이징 (1) | 2024.12.15 |
---|---|
[JAVA] Gson과 최신 Java 기능 연계 (0) | 2024.12.15 |
[JAVA] Gson 자주 발생하는 문제와 해결법 (0) | 2024.12.15 |
[JAVA] Gson과 REST API (0) | 2024.12.15 |
[JAVA] Gson의 제한사항과 문제 해결 (0) | 2024.12.14 |
[JAVA] Gson을 활용한 성능 최적화 (0) | 2024.12.14 |
[JAVA] Gson과 JSON 파싱 (0) | 2024.12.14 |
[JAVA] Gson과 날짜/시간 처리 (0) | 2024.12.14 |