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.