2012-07-19 2 views
3

사용자 정의 JsonSerializer<DateTime>을 작성하지 않고 Joda DateTime 오브젝트를 ISO8601 String 오브젝트로 직렬화 할 수 있는지 여부를 알고 싶습니다.Jackson 2.0을 사용하여 DateTime 객체를 ISO8601로 직렬화하는 방법은 무엇입니까?

분명히 어딘가에 라이브러리에 내장되어있는 일반적인 기능입니다. 내가 찾을 수있는 가장 가까운 SerializationFeature.WRITE_DATES_AS_TIMESTAMPS이지만 이것은 Date 개체에만 적용되는 것으로 보입니다.

편집 : ISO8601DateFormat,하지만 난 다음 코드를하려고 할 때이 ISO8601 문자열을하지 않는다 : 나는 this class을 발견

ObjectMapper mapper = new ObjectMapper(); 
mapper.setDateFormat(new ISO8601DateFormat()); 
mapper.writer().writeValueAsString(DateTime.now()); 

잭슨 날짜를 취급하지 않는 것 같은데 DateTime 개체도 동일하게 적용됩니다.

UPDATE : 내가 ISO8601 날짜 시간 문자열에 대한 사용자 지정 serializer를 작성 결국

.

+2

당신이 괜찮다면 당신은 사용자 정의 직렬화가 수반 무엇을 어떻게 당신이 그것을 유선으로 대답을 밖으로 철자 수 있다면, 그것은 좋은 것입니다. 감사! – Patrick

답변

2

내가 직접 시도하지 않은,하지만 you should be able to do this 것 같습니다 : 잭슨 Joda 시간 데이터 유형에 대한 몇 가지 지원을 제공

// Set the date format to the desired (in this case, ISO8601) 
objectMapper.getDeserializationConfig().setDateFormat(myDateFormat); 

// or, as of Jackson 1.8, use 
ObjectMapper#withDateFormat(myDateFormat) 

버전 1.4을 시작으로

가입일 : 기본적으로, 그 DateTimejava.util.Date 처리 방법과 마찬가지로 자동으로 직렬화/역 직렬화 할 수 있습니다.

현재의 API 호출은 다음과 같습니다

.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); 
+0

이제 기본 ISO8601 DateFormat이없는 이유는 무엇입니까? > : | – jabalsad

+0

또한 이러한 메소드 중 일부는 더 이상 2.0 API에 없다고 생각합니다. 'ObjectMapper # setDateFormat'을 사용해야 할 것 같습니다. 비록 내가 아직도 내 자신의 ISO8601 호환 DateFormat을 만들 필요가 있기 때문에 이것은 실제로 도움이되지 않지만. – jabalsad

관련 문제