티스토리 뷰
모든 소스는 여기서 확인하실 수 있습니다.
Jackson에서 다형성 처리를 위하여 아래와 같은 애노테이션을 사용합니다.
- @JsonTypeInfo: 직렬화 시 포함할 타입 정보의 세부 사항을 나타냅니다.
- @JsonSubTypes: 애노테이션이 달린 타입의 하위 타입을 지정합니다.
- @JsonTypeName: 애노테이션이 달린 타입의 논리적 이름을 지정합니다.
package io.lcalmsky.jackson.domain;
import com.fasterxml.jackson.annotation.JsonSubTypes;
import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeName;
public class Zoo {
public Animal animal;
public Zoo(Animal animal) {
this.animal = animal;
}
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(value = Dog.class, name = "dog"),
@JsonSubTypes.Type(value = Cat.class, name = "cat")
})
public static class Animal {
public String name;
}
@JsonTypeName("dog")
public static class Dog extends Animal {
public double barkVolume;
public Dog(String name) {
super.name = name;
}
}
@JsonTypeName("cat")
public static class Cat extends Animal {
public int lives;
boolean likesCream;
}
}
package io.lcalmsky.jackson.domain;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test;
import static org.hamcrest.CoreMatchers.containsString;
import static org.hamcrest.MatcherAssert.assertThat;
public class PolymorphicTests {
@Test
public void WhenPolymorphicBeanProvided_ThenSerialize_ExpectCorrect() throws JsonProcessingException {
// when
Zoo.Dog dog = new Zoo.Dog("lacy");
Zoo zoo = new Zoo(dog);
// then
String json = new ObjectMapper().writeValueAsString(zoo);
// expected
System.out.println(json);
assertThat(json, containsString("type"));
assertThat(json, containsString("dog"));
}
}
Testing started at 4:25 PM ...
> Task :jackson:cleanTest
> Task :jackson:compileJava
> Task :jackson:processResources NO-SOURCE
> Task :jackson:classes
> Task :jackson:compileTestJava
> Task :jackson:processTestResources NO-SOURCE
> Task :jackson:testClasses
> Task :jackson:test
{"animal":{"type":"dog","name":"lacy","barkVolume":0.0}}
BUILD SUCCESSFUL in 2s
4 actionable tasks: 4 executed
4:25:03 PM: Tasks execution finished ':jackson:cleanTest :jackson:test --tests "io.lcalmsky.jackson.domain.PolymorphicTests.WhenPolymorphicBeanProvided_ThenSerialize_ExpectCorrect"'.
'Java' 카테고리의 다른 글
Jackson의 모든 것 - 커스터마이징 편 (0) | 2019.11.26 |
---|---|
Jackson의 모든 것 - 일반편 (0) | 2019.11.22 |
Jackson의 모든 것 - Property 편 (0) | 2019.11.20 |
Jackson의 모든 것 - 역 직렬화 편 (0) | 2019.11.19 |
Jackson의 모든 것 - 직렬화 편 (0) | 2019.11.15 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Jackson
- 스프링 부트 애플리케이션
- leetcode
- 함께 자라기 후기
- 스프링 부트
- proto3
- 스프링 부트 튜토리얼
- intellij
- Spring Boot JPA
- spring boot app
- 스프링 부트 회원 가입
- 함께 자라기
- JPA
- QueryDSL
- @ManyToOne
- 알고리즘
- r
- 스프링 데이터 jpa
- 헥사고날 아키텍처
- 스프링부트
- Spring Boot
- JSON
- Spring Data JPA
- spring boot application
- Spring Boot Tutorial
- Java
- Linux
- spring boot jwt
- gRPC
- 클린 아키텍처
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함