1. Jackson
- jackson은 Spring Boot에서 기본적으로 제공되는 JSON 직렬화 도구입니다.
- spring-boot-starter-json 모듈의 도구입니다.
- auto-configuration 기능으로 제공되는 도구입니다.
- 직렬화를 담당하는 클래스인 ObjectMapper가 자동으로 설정됩니다.
Custom Serializers and Deserializers
- ObjectMapper는 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);
}
}
}
- @JsonComponent
- JsonSerializer와 JsonDeserializer 클래스 커스터마이징을 쉽게 하도록 Spring Boot에서 제공하는 어노테이션입니다.
- @JsonComponent는 @Component를 가진 메타 어노테이션입니다.
- JsonSerializer와 JsonDeserializer 클래스를 inner class로 두고 커스터마이징하면 됩니다.
@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를 확장한 helper base class입니다.
- 직렬화 및 역직렬화를 단순화하도록 설계되었습니다.
Mixins
- target class에 이미 선언된 애노테이션에 추가적인 애노테이션을 혼합할 수 있도록 지원하는 기능입니다.
- 추가적인 직렬화 및 역직렬화 지시를 구성할 수 있습니다.
- auto-configuration은 @JsonMixin이 달린 클래스를 찾아 ObjectMapper에 등록합니다.
- JsonMixinModule에 의해 수행됩니다.
public class User {
public int id;
public String name;
}
@JsonMixin(UserMixin.class)
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] 2-10. Core Features: Auto-Configuration (0) | 2023.10.11 |
---|---|
[Spring Boot] 2-8. Core Features: Test (2) | 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 |