Dátumparaméterekkel való munka tavasszal

1. Bemutatkozás

Ebben a rövid bemutatóban megnézzük, hogyan lehet elfogadni Dátum, LocalDate és LocalDateTime paraméterek a tavaszi REST kérésekben, mind kérelem, mind alkalmazás szinten.

2. A probléma

Vegyünk egy vezérlőt három elfogadható módszerrel Dátum, LocalDate és LocalDateTime paraméterek:

@RestController public class DateTimeController {@PostMapping ("/ date") public void date (@RequestParam ("date") Date date) {// ...} @PostMapping ("/ localdate") public void localDate (@RequestParam ( "localDate") LocalDate localDate) {// ...} @PostMapping ("/ localdatetime") public void dateTime (@RequestParam ("localDateTime") LocalDateTime localDateTime) {// ...}}

Amikor POST kérést küldünk bármelyik módszerhez, az ISO 8601 szerint formázott paraméterrel, kivételt kapunk.

Például, amikor a „2018-10-22” üzenetet elküldi a /dátum végpont egy rossz kérési hibát kapunk egy ehhez hasonló üzenettel:

Nem sikerült átalakítani a „java.lang.String” típusú értéket a „java.time.LocalDate” szükséges típusra; beágyazott kivétel az org.springframework.core.convert.ConversionFailedException.

Ennek oka, hogy a Spring alapértelmezés szerint nem tudja átalakítani a karakterlánc paramétereit semmilyen dátum vagy idő objektummá.

3. Konvertálja a dátumparamétereket a kérelem szintjére

A probléma kezelésének egyik módja az, ha a paramétereket a @DateTimeFormat kommentár és formázási minta paraméter megadása:

@RestController public class DateTimeController {@PostMapping ("/ date") public void date (@RequestParam ("date") @DateTimeFormat (iso = DateTimeFormat.ISO.DATE) Date date) {// ...} @PostMapping (" / local-date ") public void localDate (@RequestParam (" localDate ") @DateTimeFormat (iso = DateTimeFormat.ISO.DATE) LocalDate localDate) {// ...} @PostMapping (" / local-date-time ") public void dateTime (@RequestParam ("localDateTime") @DateTimeFormat (iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime localDateTime) {// ...}}

Így a karakterláncokat megfelelően konvertálják dátumobjektummá, feltéve, hogy a karakterláncokat az ISO 8601 formátumban formázzák.

Használhatjuk saját konverziós mintáinkat is. Csak megadhatunk egy minta paramétert a @DateTimeFormat kommentár:

@PostMapping ("/ date") public void date (@RequestParam ("date") @DateTimeFormat (pattern = "dd.MM.yyyy") Date date) {// ...}

4. Konvertálja a dátumparamétereket az alkalmazás szintjén

A dátum és idő objektum tavasszal történő átalakításának másik módja a globális konfiguráció megadása. A hivatalos dokumentáció követésével ki kell terjesztenünk a WebMvcConfigurationSupport konfigurációját és kiterjeszti azt mvcConversionService módszer:

A @Configuration public class DateTimeConfig kiterjeszti a WebMvcConfigurationSupport {@Bean @Override public FormattingConversionService mvcConversionService () {DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService (hamis); DateTimeFormatterRegistrar dateTimeRegistrar = new DateTimeFormatterRegistrar (); dateTimeRegistrar.setDateFormatter (DateTimeFormatter.ofPattern ("dd.MM.yyyy")); dateTimeRegistrar.setDateTimeFormatter (DateTimeFormatter.ofPattern ("dd.MM.yyyy HH: mm: ss")); dateTimeRegistrar.registerFormatters (conversionService); DateFormatterRegistrar dateRegistrar = new DateFormatterRegistrar (); dateRegistrar.setFormatter (új DateFormatter ("dd.MM.yyyy")); dateRegistrar.registerFormatters (conversionService); return conversionService; }}

Először létrehozunk DefaultFormattingConversionService hamis paraméterrel, ami azt jelenti, hogy a Spring alapértelmezés szerint nem regisztrál formázókat.

Ezután regisztrálnunk kell a dátum és a dátum-idő paraméterek egyéni formátumait. Két egyedi formázási regisztrátor regisztrálásával kell elvégeznünk. Az első - DateTimeFormatterRegistar felelős lesz a LocalDate és LocaDateTime tárgyakat. A második - DateFormattingRegistrar kezeli a Dátum tárgy.

5. Összefoglalás

Ebben a cikkben megtanultuk, hogyan fogadhatjuk el a dátumparamétereket a tavaszi MVC-kérelmekben. Kitértünk arra, hogyan kell ezt végrehajtani kérésenként és globálisan.

Megtanultuk saját dátumformázási mintáink létrehozását is.

Mint mindig, az összes forráskód elérhető a GitHubon.


$config[zx-auto] not found$config[zx-overlay] not found