@JsonView를 사용하려면 mapper에 몇가지 설정을 해줘야한다.
@Test
public void testQuery() throws JsonProcessingException {
UserId userId = new UserId(1L);
QueryParam step1 = new QueryParam( SandboxFriends.LABEL, 0, 1, Direction.out.name());
GetEdgesResponse<SandboxFriends> ret = helper.getEdges(userId, new TypeReference<GetEdgesResponse<SandboxFriends>>(){}, new QueryStep( step1 ));
logger.debug( ret.toString() );
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false);
System.out.println( mapper.writerWithView( Edge.Insert.class ).writeValueAsString( ret.getResults().get(0) ) );
}
Java에는 Type-erasure라는 것이 있단다.
Runtime에 Generic variable로 남아있는 것들은 모두 Object로 바뀐단다...
이때문에 json deserialization 할 때 type 정보가 사라져서 HashMap으로 대체되는 일이 발생한다.
이를 극복하려면 아래처럼 TypeReference를 caller가 지정해서 generic 변수를 compile 타임에 지정해줘야 한다.
GetEdgesResponse<SandboxFriends> ret = helper.getEdges(userId, new TypeReference<GetEdgesResponse<SandboxFriends>>(){}, new QueryStep( step1 ));
'SW-PRODUCT > 개발' 카테고리의 다른 글
(링크) Deview2015 참관기 (0) | 2015.09.18 |
---|---|
microsecond 자바?!! (0) | 2015.09.17 |
Deep Learning 파이선 패키지 (0) | 2015.06.02 |
터미널에서 쓸 수 있는 Javascript로 만들어진 Dashboard! (0) | 2015.05.27 |
Deep Learning 학습계획 (0) | 2015.05.07 |