עבודה עם פרמטרים של תאריך באביב

1. הקדמה

במדריך קצר זה, נבחן כיצד לקבל תַאֲרִיך, LocalDate ו LocalDateTime פרמטרים בבקשות REST באביב, הן ברמת הבקשה והן ברמת היישום.

2. הבעיה

בואו ניקח בחשבון בקר עם שלוש שיטות המקבלות תַאֲרִיך, LocalDate ו LocalDateTime פרמטרים:

@RestController מחלקה ציבורית DateTimeController {@PostMapping ("/ date") תאריך בטל ציבורי (@RequestParam ("date") תאריך תאריך) {// ...} @PostMapping ("/ localdate") חלל ציבורי localDate (@RequestParam ( "localDate") LocalDate localDate) {// ...} @PostMapping ("/ localdatetime") תאריך ציבורי בטל (@RequestParam ("localDateTime") LocalDateTime localDateTime) {// ...}}

בעת שליחת בקשת POST לכל אחת משיטות אלה עם פרמטר המעוצב בהתאם ל- ISO 8601 נקבל חריג.

לדוגמא, בעת שליחת "2018-10-22" אל /תַאֲרִיך נקודת קצה נקבל שגיאת בקשה לא טובה עם הודעה דומה לזו:

נכשל המרת הערך מסוג 'java.lang.String' לסוג הנדרש 'java.time.LocalDate'; החריג המקונן הוא org.springframework.core.convert.ConversionFailedException.

הסיבה לכך היא כי אביב כברירת מחדל אינו יכול להמיר פרמטרים של מחרוזות לאף אובייקט תאריך או שעה.

3. המר פרמטרים של תאריך ברמת הבקשה

אחת הדרכים להתמודד עם בעיה זו היא להוסיף הערות לפרמטרים עם ה- @DateTimeFormat ביאור וספק פרמטר לדפוס עיצוב:

@RestController מחלקה ציבורית DateTimeController {@PostMapping ("/ date") תאריך בטל ציבורי (@RequestParam ("date") @DateTimeFormat (iso = DateTimeFormat.ISO.DATE) תאריך תאריך) {// ...} @PostMapping (" / local-date ") חלל ציבורי localDate (@RequestParam (" localDate ") @DateTimeFormat (iso = DateTimeFormat.ISO.DATE) LocalDate localDate) {// ...} @PostMapping (" / Local-date-time ") בטל פומבי dateTime (@RequestParam ("localDateTime") @DateTimeFormat (iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime localDateTime) {// ...}}

בדרך זו, המיתרים יומרו כראוי לאובייקטים תאריך, בתנאי שהמחרוזות מעוצבות באמצעות פורמט ISO 8601.

אנו יכולים גם להשתמש בדפוסי המרה משלנו. אנחנו יכולים פשוט לספק פרמטר דפוס ב- @DateTimeFormat ביאור:

@PostMapping ("/ date") תאריך בטל ציבורי (@RequestParam ("date") @DateTimeFormat (תבנית = "dd.MM.yyyy") תאריך תאריך) {// ...}

4. המר פרמטרים של תאריך ברמת היישום

דרך נוספת לטפל בהמרת אובייקטים בתאריך ובזמן באביב היא לספק תצורה גלובלית. על ידי ביצוע התיעוד הרשמי עלינו להאריך את WebMvcConfigurationSupport תצורה ומרחיב את mvcConversionService שיטה:

@Configuration class class DateTimeConfig מרחיב את WebMvcConfigurationSupport {@Bean @Override public FormattingConversionService mvcConversionService () {DefaultFormattingConversionService conversionService = DefaultFormattingConversionService חדש (שקר); DateTimeFormatterRegistrar dateTimeRegistrar = חדש DateTimeFormatterRegistrar (); dateTimeRegistrar.setDateFormatter (DateTimeFormatter.ofPattern ("dd.MM.yyyy")); dateTimeRegistrar.setDateTimeFormatter (DateTimeFormatter.ofPattern ("dd.MM.yyyy HH: mm: ss")); dateTimeRegistrar.registerFormatters (conversionService); DateFormatterRegistrar dateRegistrar = חדש DateFormatterRegistrar (); dateRegistrar.setFormatter (DateFormatter חדש ("dd.MM.yyyy")); dateRegistrar.registerFormatters (conversionService); החזר המרת שירות; }}

ראשית, אנו יוצרים DefaultFormattingConversionService עם פרמטר כוזב, כלומר אביב לא ירשום מעצבים כלשהם כברירת מחדל.

לאחר מכן, עלינו לרשום את הפורמטים המותאמים אישית שלנו לפרמטרים של תאריך ושעה. עלינו לעשות זאת על ידי רישום שני רשמי עיצוב מותאמים אישית. הראשון - DateTimeFormatterRegistar תהיה אחראית לניתוח LocalDate ו LocaDateTime חפצים. השני - DateFormattingRegistrar יטפל ב תַאֲרִיך לְהִתְנַגֵד.

5. סיכום

במאמר זה למדנו כיצד לקבל את פרמטרי התאריך בבקשות MVC באביב. סקרנו כיצד לעשות זאת לפי בקשה ובעולם.

למדנו גם כיצד ליצור דפוסי עיצוב תאריכים משלנו.

כמו תמיד כל קוד המקור זמין ב- GitHub.


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