Java · Jackson JSON naming
Jackson snake_case ↔ camelCase
Java property는 camelCase로 유지하고 외부 snake_case JSON만 serialization 경계에서 변환하세요.
하나의 model/DTO에는 @JsonNaming
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.annotation.JsonNaming;
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
public class UserProfile {
private String firstName;
private String avatarUrl;
}SnakeCaseStrategy로 firstName을 first_name에 연결해 각 property마다 annotation을 붙일 필요를 줄입니다.
앱 전체 규칙에는 ObjectMapper
ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
UserProfile profile = mapper.readValue(json, UserProfile.class);
String output = mapper.writeValueAsString(profile);PropertyNamingStrategies.SNAKE_CASE를 설정하면 serialization/deserialization 외부 property 이름에 적용됩니다.
예외에는 @JsonProperty
public class UserProfile {
@JsonProperty("user_id")
private String userId;
@JsonProperty("display_name")
private String displayName;
}글로벌 규칙을 따르지 않는 소수 외부 이름에는 명시적 property mapping을 사용합니다.
프로덕션 고려사항
- 규칙의 소유 레벨을 class, ObjectMapper, field 중 명확히 정하세요.
- naming strategy는 JSON property 이름을 바꾸며 string value는 바꾸지 않습니다.
- 여러 외부 이름이 하나의 property로 정규화되면 API contract 문제로 다루세요.
- 예시는 Jackson 2.x package를 사용하므로 현재 major version의 migration 문서를 확인하세요.
JSON 경계 온라인 테스트
중첩 객체, 배열, 제외 키, stop path, 접두사, 충돌, key-only diff를 구현 전에 확인하세요.
.json 파일을 놓거나 기기에서 선택
파일은 브라우저에서만 읽습니다. 최대 크기: 5 MB.
변환된 JSON
{
"user_profile": {
"first_name": "Ada",
"created_at": "2026-09-12"
}
}파싱, 파일 읽기, 포맷 및 키 변환은 모두 브라우저에서 로컬로 실행됩니다. JSON 입력은 변환 서버로 전송되지 않습니다.