2014-09-27 2 views
4

Java을 사용하여 Java Bean을 Map으로 변환합니다.잭슨 개체를지도로 유지 관리 보존 날짜 유형

그러나 Date 개체는 보존되지 않고 Long으로 변환됩니다.

여기

실패한 테스트 케이스는,

@Test 
public void testObjectToMapDate() { 

    User user = new User(); 
    user.setDob(new Date()); 

    ObjectMapper mapper = new ObjectMapper(); 
    Map<String, Object> map = mapper.convertValue(user, Map.class); 
    assertTrue(map.get("dob") instanceof Date); 

} 

이에 대한 간단한 해결책이 있는가?

+0

@sotirios가 옳습니다. 자세한 내용은 [doc] (http://fasterxml.github.io/jackson-databind/javadoc/2.4/com/fasterxml/jackson/databind/ObjectMapper.html)을 참조하십시오. – hsluo

답변

7

기본적으로 Jackson은 java.util.Date 인스턴스를 숫자 시간 소인으로 serialize합니다. 당신은

mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); // it's true by default 

와 텍스트 표현을 사용하거나 자신의 JsonSerializer을 제공하기 위해 잭슨을 구성 할 수 있습니다.

그러나 변환을 수행 할 때 중급 JSON과 대상 유형 인 Map에는 아무 것도 없기 때문에 Jackson에 Date 객체로 역 직렬화해야 함을 나타냅니다. 추가 유형 정보가 없으면 Jackson은 기본값 (long, double, String, LinkedHashMap)을 사용하여 항상 비 직렬화합니다.

+0

사용자 지정 디시리얼라이저를 구성 할 수있는 방법이 있습니까? ISO 타임 스탬프의 정규식과 일치하고 일치하는 날짜로 역 직렬화할까요? – Wheezil