물론 직렬화 및 역 직렬화라는 자동화 된 방법 이 있으며 특정 주석 ( @JsonSerialize , @JsonDeserialize)으로 정의 할 수 있습니다. 언급 )으로 있습니다.
java.util.Date 및 java.util.Calendar ...와 아마도 JodaTime을 모두 사용할 수 있습니다.
역 직렬화 (직렬화가 완벽하게 작동 ) 중에 @JsonFormat 주석이 원하는대로 작동하지 않았습니다 ( 시간대 를 다른 값으로 조정 했습니다).
@JsonFormat(locale = "hu", shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm", timezone = "CET")
@JsonFormat(locale = "hu", shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm", timezone = "Europe/Budapest")
예측 된 결과를 원하면 @JsonFormat 주석 대신 사용자 정의 직렬 변환기 및 사용자 정의 디시리얼라이저를 사용해야합니다. 여기에서 훌륭한 튜토리얼과 솔루션을 찾았습니다.http://www.baeldung.com/jackson-serialize-dates에서 .
Date 필드 에는 예제가 있지만 Calendar 필드에는 필요 하므로 구현은 다음과 같습니다.
시리얼 라이저 클래스 :
public class CustomCalendarSerializer extends JsonSerializer<Calendar> {
public static final SimpleDateFormat FORMATTER = new SimpleDateFormat("yyyy-MM-dd HH:mm");
public static final Locale LOCALE_HUNGARIAN = new Locale("hu", "HU");
public static final TimeZone LOCAL_TIME_ZONE = TimeZone.getTimeZone("Europe/Budapest");
@Override
public void serialize(Calendar value, JsonGenerator gen, SerializerProvider arg2)
throws IOException, JsonProcessingException {
if (value == null) {
gen.writeNull();
} else {
gen.writeString(FORMATTER.format(value.getTime()));
}
}
}
디시리얼라이저 클래스 :
public class CustomCalendarDeserializer extends JsonDeserializer<Calendar> {
@Override
public Calendar deserialize(JsonParser jsonparser, DeserializationContext context)
throws IOException, JsonProcessingException {
String dateAsString = jsonparser.getText();
try {
Date date = CustomCalendarSerializer.FORMATTER.parse(dateAsString);
Calendar calendar = Calendar.getInstance(
CustomCalendarSerializer.LOCAL_TIME_ZONE,
CustomCalendarSerializer.LOCALE_HUNGARIAN
);
calendar.setTime(date);
return calendar;
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}
위 클래스 의 사용법 :
public class CalendarEntry {
@JsonSerialize(using = CustomCalendarSerializer.class)
@JsonDeserialize(using = CustomCalendarDeserializer.class)
private Calendar calendar;
// ... additional things ...
}
이 구현을 사용하면 직렬화 및 역 직렬화 프로세스를 연속적으로 실행하면 원점 값이 생성됩니다.
@JsonFormat 주석 만 사용하면 deserialization은 라이브러리 내부 표준 시간대 기본 설정 때문에 주석 매개 변수로 변경할 수없는 결과 (Jackson 라이브러리 2.5.3 및 2.6.3 버전에서도 경험 한 결과)가 다른 결과를 낳습니다 .