1. Jackson
항목 | 설명 |
기본 제공 |
Spring Boot는 spring-boot-starter-json을 통해 Jackson을 기본 JSON 직렬화 도구로 사용
|
자동 설정 |
Spring Boot의 Auto-Configuration에 의해 ObjectMapper가 자동 설정됨
|
핵심 클래스 |
ObjectMapper: 직렬화/역직렬화의 중심 클래스
|
Custom Serializers and Deserializers
@JsonComponent
항목 | 설명 |
정의 |
커스텀 Serializer/Deserializer를 빈으로 자동 등록
ObjectMapper에 등록됨 |
특징 |
내부 클래스 형태로 JsonSerializer, JsonDeserializer 구현 가능
|
메타 정보 |
@Component가 메타 어노테이션으로 포함되어 있음
|
예시) 커스텀 JsonSerializer / JsonDeserializer
더보기
@JsonComponent
public class MyJsonComponent {
public static class Serializer extends JsonSerializer<MyObject> {
@Override
public void serialize(MyObject value, JsonGenerator jgen, SerializerProvider serializers) throws IOException {
jgen.writeStartObject();
jgen.writeStringField("name", value.getName());
jgen.writeNumberField("age", value.getAge());
jgen.writeEndObject();
}
}
public static class Deserializer extends JsonDeserializer<MyObject> {
@Override
public MyObject deserialize(JsonParser jsonParser, DeserializationContext ctxt) throws IOException {
ObjectCodec codec = jsonParser.getCodec();
JsonNode tree = codec.readTree(jsonParser);
String name = tree.get("name").textValue();
int age = tree.get("age").intValue();
return new MyObject(name, age);
}
}
}
- serialize, deserialize 메서드를 오버라이드하여 원하는 JSON 포맷으로 커스터마이징
예시) 커스텀 JsonObjectSerializer / JsonObjectDeserializer
더보기
@JsonComponent
public class MyJsonComponent {
public static class Serializer extends JsonObjectSerializer<MyObject> {
@Override
protected void serializeObject(MyObject value, JsonGenerator jgen, SerializerProvider provider)
throws IOException {
jgen.writeStringField("name", value.getName());
jgen.writeNumberField("age", value.getAge());
}
}
public static class Deserializer extends JsonObjectDeserializer<MyObject> {
@Override
protected MyObject deserializeObject(JsonParser jsonParser, DeserializationContext context, ObjectCodec codec,
JsonNode tree) throws IOException {
String name = nullSafeValue(tree.get("name"), String.class);
int age = nullSafeValue(tree.get("age"), Integer.class);
return new MyObject(name, age);
}
}
}
항목 | 설명 |
JsonObjectSerializer JsonObjectDeserializer |
JsonSerializer, JsonDeserializer의 헬퍼 베이스 클래스
|
장점 |
코드 간소화, serializeObject, deserializeObject만 오버라이드하면 됨
|
null-safe |
예: nullSafeValue(tree.get("name"), String.class) 같은 헬퍼 메서드 사용 가능
|
Mixins
항목 | 설명 |
목적 |
기존 클래스에 직접 애노테이션을 수정하지 않고 직렬화/역직렬화 설정을 추가할 수 있음
|
대상 |
주로 라이브러리 클래스나 외부 클래스 등 수정 불가한 클래스
|
구성 방식 |
@JsonMixin(TargetClass.class)를 사용하여 별도의 Mixin 클래스에서 필드 매핑
|
예제) UserMixin
더보기
@JsonMixin(UserMixin.class)
public class User {
public int id;
public String name;
}
public class UserMixin {
@JsonProperty("user_id")
public int id;
@JsonProperty("user_name")
public String name;
}
- User 클래스의 id, name 필드를 UserMixin에서 사용된 @JsonProperty의 값으로 매핑됩니다.
참고
'Spring > Spring Boot' 카테고리의 다른 글
[Spring Boot] 3. Web: Servlet Web Application (0) | 2023.10.12 |
---|---|
[Spring Boot] 2-10. Core Features: Auto-Configuration (0) | 2023.10.11 |
[Spring Boot] 2-3. Core Features: Profile (0) | 2023.10.09 |
[Spring Boot] 2-2. Core Features: Externalized Configuration (2) | 2023.10.09 |
[Spring Boot] 2-1. Core Features: SpringApplication 클래스 (0) | 2023.10.08 |