@Kimble이 말했듯이 Jackson 2에서는 기본 서식을 사용하는 것이 매우 쉽습니다. 에 등록 JodaModule
하기 만하면 됩니다 ObjectMapper
.
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JodaModule());
의 사용자 정의 직렬화 / 비 직렬화의 DateTime
경우 자체 StdScalarSerializer
및 StdScalarDeserializer
; 꽤 복잡하지만 어쨌든.
예를 들어 다음 은 UTC 시간대와 함께 DateTime
를 사용 하는 직렬 변환기입니다 ISODateFormat
.
public class DateTimeSerializer extends StdScalarSerializer<DateTime> {
public DateTimeSerializer() {
super(DateTime.class);
}
@Override
public void serialize(DateTime dateTime,
JsonGenerator jsonGenerator,
SerializerProvider provider) throws IOException, JsonGenerationException {
String dateTimeAsString = ISODateTimeFormat.withZoneUTC().print(dateTime);
jsonGenerator.writeString(dateTimeAsString);
}
}
그리고 해당 de-serializer :
public class DateTimeDesrializer extends StdScalarDeserializer<DateTime> {
public DateTimeDesrializer() {
super(DateTime.class);
}
@Override
public DateTime deserialize(JsonParser jsonParser,
DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
try {
JsonToken currentToken = jsonParser.getCurrentToken();
if (currentToken == JsonToken.VALUE_STRING) {
String dateTimeAsString = jsonParser.getText().trim();
return ISODateTimeFormat.withZoneUTC().parseDateTime(dateTimeAsString);
}
} finally {
throw deserializationContext.mappingException(getValueClass());
}
}
그런 다음 모듈과 함께 연결합니다.
public class DateTimeModule extends SimpleModule {
public DateTimeModule() {
super();
addSerializer(DateTime.class, new DateTimeSerializer());
addDeserializer(DateTime.class, new DateTimeDeserializer());
}
}
그런 다음에 모듈을 등록하십시오 ObjectMapper
.
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new DateTimeModule());