Jackson을 사용하여 JS 날짜를 역 직렬화하는 방법은 무엇입니까?
ExtJS에서 다음 형식으로 날짜 문자열을 얻습니다.
"2011-04-08T09 : 00 : 00"
이 날짜를 역 직렬화하려고하면 시간대가 인도 표준시로 변경됩니다 (시간에 +5 : 30 추가). 이것이 내가 날짜를 역 직렬화하는 방법입니다.
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
getObjectMapper().getDeserializationConfig().setDateFormat(dateFormat);
이렇게해도 시간대가 변경되지 않습니다. 나는 여전히 IST에서 날짜를 얻습니다.
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
getObjectMapper().getDeserializationConfig().setDateFormat(dateFormat);
시간대의 번거 로움없이 날짜가 오는 방식으로 어떻게 deserialize합니까?
해결 방법을 찾았지만이를 통해 프로젝트 전체에 걸쳐 각 날짜의 setter에 주석을 달아야합니다. ObjectMapper를 만드는 동안 형식을 지정할 수있는 방법이 있습니까?
내가 한 일은 다음과 같습니다.
public class CustomJsonDateDeserializer extends JsonDeserializer<Date>
{
@Override
public Date deserialize(JsonParser jsonParser,
DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
String date = jsonParser.getText();
try {
return format.parse(date);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
}
각 날짜 필드의 setter 메서드에 다음과 같이 주석을 달았습니다.
@JsonDeserialize(using = CustomJsonDateDeserializer.class)
이것은 나를 위해 작동합니다-나는 jackson 2.0.4를 사용하고 있습니다.
ObjectMapper objectMapper = new ObjectMapper();
final DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
objectMapper.setDateFormat(df);
이 주제에 대한 좋은 블로그가 있습니다. http://www.baeldung.com/jackson-serialize-dates @JsonFormat 사용이 가장 간단한 방법입니다.
public class Event {
public String name;
@JsonFormat
(shape = JsonFormat.Shape.STRING, pattern = "dd-MM-yyyy hh:mm:ss")
public Date eventDate;
}
Varun Achar의 대답 외에도 이것은 이전 java.util.Date 클래스 대신 java.time.LocalDate 및 ZonedDateTime을 사용하는 Java 8 변형입니다.
public class LocalDateDeserializer extends JsonDeserializer<LocalDate> {
@Override
public LocalDate deserialize(JsonParser jsonparser, DeserializationContext deserializationcontext) throws IOException {
String string = jsonparser.getText();
if(string.length() > 20) {
ZonedDateTime zonedDateTime = ZonedDateTime.parse(string);
return zonedDateTime.toLocalDate();
}
return LocalDate.parse(string);
}
}
@JsonFormat은 사용중인 jackson 버전에서 지원하는 표준 형식에서만 작동합니다.
예 :-모든 표준 형식 ( "yyyy-MM-dd'T'HH : mm : ss.SSSZ", "yyyy-MM-dd'T'HH : mm : ss.SSS'Z '", " EEE, dd MMM yyyy HH : mm : ss zzz ","yyyy-MM-dd ")) for jackson 2.8.6
참고 URL : https://stackoverflow.com/questions/5591967/how-to-deserialize-js-date-using-jackson
'Nice programing' 카테고리의 다른 글
컬렉션에서 항목을 제거하는 가장 좋은 방법 (0) | 2020.11.09 |
---|---|
코드에서 div를 숨기는 방법 (C #) (0) | 2020.11.09 |
스케일이 다른 matplotlib의 다중 축 (0) | 2020.11.09 |
커서를 특정 행과 열로 이동하려면 어떻게합니까? (0) | 2020.11.09 |
Lisp의 유연성에 대한 실제적인 예? (0) | 2020.11.09 |