API 응답 JSON을 붙여넣으면 중첩 객체·배열까지 Java 클래스로 만들어줍니다.
왼쪽에 API 응답 JSON을 붙여넣으면 Java DTO 클래스가 여기에 나옵니다.
입력 JSON
{
"order_id": 1024,
"buyer": { "member_id": 7, "name": "이건모" },
"items": [{ "product_no": 11, "qty": 1 }]
}Java DTO (Lombok, 접미사 Dto)
@Getter
@Setter
@NoArgsConstructor
@ToString
public class OrderDto {
@JsonProperty("order_id")
private Long orderId;
private BuyerDto buyer;
private List<ItemDto> items;
@Getter @Setter @NoArgsConstructor @ToString
public static class BuyerDto {
@JsonProperty("member_id")
private Long memberId;
private String name;
}
@Getter @Setter @NoArgsConstructor @ToString
public static class ItemDto {
@JsonProperty("product_no")
private Long productNo;
private Integer qty;
}
}| JSON 값 | Java 타입 |
|---|---|
| "PAID" | String |
| 1024 | Integer (id·No 계열, int 범위 초과면 Long) |
| 35000.5 | BigDecimal 또는 Double |
| true | Boolean |
| "2026-09-30T21:03:11" | LocalDateTime |
| { … } | 내부 static class (키 이름으로 클래스명) |
| ["a", "b"] | List<String> |
| [{ … }, { … }] | List<Item> (items → Item 단수형) |
| null, [] | Object, List<Object> |
소수점이 없으면 Integer, int 범위를 넘거나 키 이름이 id·Id·_id·No로 끝나면 Long입니다. 소수점이 있으면 옵션에 따라 BigDecimal 또는 Double이 됩니다. 배열 안에서 1과 2.5가 섞여 있으면 소수 타입으로 맞춥니다.
배열의 모든 원소를 훑어서 키를 합칩니다. 어떤 원소에만 있는 키도 필드로 들어가니, 첫 번째 원소만 보고 만드는 도구처럼 필드가 빠지지 않습니다.
JSON 키와 Java 필드명이 다를 때만 붙습니다. order_id → orderId처럼 snake_case를 camelCase로 바꾸거나, class·3d처럼 Java에서 쓸 수 없는 이름을 바꾼 경우입니다. 프로젝트에서 PropertyNamingStrategies.SNAKE_CASE를 쓰고 있다면 옵션을 끄면 됩니다.
값만으로는 타입을 알 수 없어서 Object로 둡니다. 배열의 다른 원소에 실제 값이 있으면 그 타입을 따릅니다. 실제 응답에서 값이 채워진 예시를 넣을수록 정확해져요.
2026-09-30은 LocalDate, 2026-09-30T21:03:11은 LocalDateTime, 끝에 Z나 +09:00이 붙으면 OffsetDateTime으로 바꿉니다. Spring Boot는 Jackson JavaTimeModule이 기본으로 들어 있어서 그대로 역직렬화됩니다. 공백으로 구분된 형식은 @JsonFormat이 필요해서 String으로 둡니다.
Jackson 2.12 이상(Spring Boot 2.5 이상)이면 record를 바로 역직렬화합니다. 이 경우 @JsonProperty는 생성자 파라미터에 붙어서 나옵니다.
JSON이 한 줄로 뭉쳐 있다면 JSON Formatter로 먼저 정리하고, DB 테이블에서 DTO를 만들 땐 DDL → Java DTO를 써보세요.