Mam mały problem z formatowaniem Java 8 LocalDateTime w mojej aplikacji Spring Boot. Z „normalnymi” datami nie mam problemu, ale pola LocalDateTime są konwertowane na następujące:
"startDate" : {
"year" : 2010,
"month" : "JANUARY",
"dayOfMonth" : 1,
"dayOfWeek" : "FRIDAY",
"dayOfYear" : 1,
"monthValue" : 1,
"hour" : 2,
"minute" : 2,
"second" : 0,
"nano" : 0,
"chronology" : {
"id" : "ISO",
"calendarType" : "iso8601"
}
}
Chociaż chciałbym przekonwertować to na coś takiego:
"startDate": "2015-01-01"
Mój kod wygląda tak:
@JsonFormat(pattern="yyyy-MM-dd")
@DateTimeFormat(iso = DateTimeFormat.ISO.TIME)
public LocalDateTime getStartDate() {
return startDate;
}
Ale żadna z powyższych adnotacji nie działa, data jest formatowana jak powyżej. Sugestie mile widziane!
@JsonSerialize(using = LocalDateTimeSerializer.class)
...application.properties
wpisu, jak sugeruje @patelb odpowiedź.@JsonSerialize
adnotacji, o której wspomniał Nick.Dodałem
com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.6.1
zależność i zacząłem pobierać datę w następującym formacie:co nie jest tym, czego chciałem, ale zbliżałem się. Następnie dodałem następujące
do pliku application.properties, który dał mi właściwy format, którego potrzebowałem.
źródło
jackson-datatype-jsr310
zależność. To powinna być akceptowana odpowiedź.mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
Tutaj jest w maven, z posiadłością, dzięki której możesz przetrwać między wiosennymi aktualizacjami butów
źródło
@JsonSerialize(using = LocalDateTimeSerializer.class)
1) Zależność
2) Adnotacja z formatem daty i godziny.
3) Konfiguracja sprężyn.
źródło
Znalazłem inne rozwiązanie, które możesz przekonwertować na dowolny format i zastosować do wszystkich typów danych LocalDateTime i nie musisz określać @JsonFormat nad każdym typem danych LocalDateTime. najpierw dodaj zależność:
Dodaj następującą fasolę:
w pliku konfiguracyjnym dodaj:
Spowoduje to serializację i deserializację wszystkich właściwości LocalDateTime i ZonedDateTime, o ile używasz objectMapper utworzonego wiosną.
Format uzyskany dla ZonedDateTime to: „2017-12-27T08: 55: 17.317 + 02: 00 [Azja / Jerozolima]” dla LocalDateTime to: „2017-12-27T09: 05: 30.523”
źródło
SimpleModule
rozszerzaModule
.Module
jest abstrakcją.val bean = new SimpleModule();
działa idealnie.Pisząc tę odpowiedź również jako przypomnienie dla mnie.
Połączyłem tutaj kilka odpowiedzi i ostatecznie moja działała z czymś takim. (Używam SpringBoot 1.5.7 i Lombok 1.16.16)
źródło
DateTimeFormat
i innych.To działa dobrze:
Dodaj zależność:
Dodaj adnotację:
Teraz musisz uzyskać właściwy format.
Aby użyć mapowania obiektów, musisz zarejestrować JavaTime
źródło
Jak już wspomniano, spring-boot pobierze wszystko, czego potrzebujesz (zarówno dla startera internetowego, jak i webflux).
Ale co lepsze - nie musisz samodzielnie rejestrować żadnych modułów. Spójrz tutaj . Ponieważ
@SpringBootApplication
używa@EnableAutoConfiguration
pod maską, oznacza to, żeJacksonAutoConfiguration
zostanie automatycznie dodany do kontekstu. Teraz, jeśli zajrzysz do środkaJacksonAutoConfiguration
, zobaczysz:Ten facet zostanie wywołany w trakcie inicjalizacji i pobierze wszystkie moduły, które może znaleźć w ścieżce klas. (Używam Spring Boot 2.1)
źródło
Używam Springboot 2.0.6 iz jakiegoś powodu zmiany w aplikacji yml nie zadziałały. Miałem też więcej wymagań.
Próbowałem stworzyć ObjectMapper i oznaczyć go jako Primary, ale spring boot narzekał, że mam już jacksonObjectMapper jako oznaczony jako Primary !!
Więc to właśnie zrobiłem. Dokonałem zmian w wewnętrznym programie mapującym.
Mój Serializer i Deserializer są wyjątkowe - zajmują się 'dd / MM / YYYY'; a podczas de-serializacji - stara się jak najlepiej wykorzystać 3-4 popularne formaty, aby upewnić się, że mam jakieś LocalDate.
źródło
@JsonDeserialize(using= LocalDateDeserializer.class)
nie działa dla mnie z poniższą zależnością.Użyłem poniższego konwertera kodu do deserializacji daty do pliku
java.sql.Date
.źródło
po prostu użyj:
lub możesz użyć wzoru, jak chcesz, na przykład:
('-' in place of '/')
źródło
Używam Spring Boot 2.1.8. Sprowadziłem
który zawiera plik jackson-datatype-jsr310 .
Następnie musiałem dodać te adnotacje
i to działa. JSON wygląda następująco:
źródło
spring-boot-starter-json
jest potrzebne tylko wtedy, gdy gospring-boot-starter-web
brakuje.