עיצוב תאריכי JSON באתחול האביב

1. סקירה כללית

במדריך זה נראה כיצד לעצב שדות תאריכים של JSON ביישום אתחול האביב.

נחקור דרכים שונות לעיצוב תאריכים באמצעות ג'קסון, המשמש את Spring Boot כמעבד JSON המוגדר כברירת מחדל.

2.באמצעות @JsonFormat על תַאֲרִיך שדה

2.1. הגדרת הפורמט

אנחנו יכולים להשתמש ב- @JsonFormat ביאור על מנת לעצב שדה ספציפי:

מחלקה ציבורית צור קשר עם {// שדות אחרים @JsonFormat (תבנית = "yyyy-MM-dd") יום הולדת פרטי של LocalDate; @JsonFormat (דפוס = "yyyy-MM-dd HH: mm: ss") פרטי LocalDateTime lastUpdate; // סטרים וקובעים סטנדרטיים}

על יום הולדת אנו משתמשים בתבנית המציגה רק את התאריך בזמן העדכון אחרון שדה אנו כוללים גם את הזמן.

השתמשנו ב- Java 8 סוגי תאריכים שהם די שימושיים להתמודדות עם טיפוסים זמניים. כמובן, אם עלינו להשתמש בסוגי המורשת כמו java.util.Date, אנו יכולים להשתמש בהערה באותו אופן:

מחלקה ציבורית ContactWithJavaUtilDate {// שדות אחרים @JsonFormat (תבנית = "yyyy-MM-dd") יום הולדת תאריך פרטי; @JsonFormat (תבנית = "yyyy-MM-dd HH: mm: ss") תאריך פרטי lastUpdate; // סטרים וקובעים סטנדרטיים}

לבסוף, בואו נסתכל על הפלט שהופק באמצעות ה- @JsonFormat עם פורמט התאריך הנתון:

{"יום הולדת": "2019-02-03", "lastUpdate": "2019-02-03 10:08:02"}

כפי שאנו רואים, באמצעות @JsonFormat ביאור הוא דרך מצוינת לעצב שדה תאריך מסוים.

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

2.2. הגדרת אזור הזמן

כמו כן, אם עלינו להשתמש באזור זמן מסוים, אנו יכולים להגדיר את ה- אזור זמן התכונה של ה- @JsonFormat:

@JsonFormat (תבנית = "yyyy-MM-dd HH: mm: ss", zone time = "Europe / Zagreb") פרטי LocalDateTime lastUpdate;

איננו צריכים להשתמש בו אם סוג כבר מכיל את אזור הזמן, למשל עם java.time.ZonedDatetime.

3. קביעת תצורה של תבנית ברירת המחדל

ובזמן @JsonFormat הוא חזק בפני עצמו, קידוד קשה של הפורמט ואזור הזמן יכולים לנגוס בנו בהמשך הדרך.

אם ברצוננו להגדיר פורמט ברירת מחדל לכל התאריכים ביישום שלנו, דרך גמישה יותר היא להגדיר אותה application.properties:

spring.jackson.date-format = yyyy-MM-dd HH: mm: ss

ואם אנו רוצים להשתמש באזור זמן מסוים בתאריכי JSON שלנו, יש גם מאפיין לכך:

spring.jackson.time-zone = אירופה / זאגרב

למרות שקביעת תבנית ברירת המחדל כזו היא די שימושית ופשוטה, יש חסרון בגישה זו. למרבה הצער, זה לא עובד עם סוגי התאריכים Java 8, כמו LocalDate ו LocalDateTime - אנו יכולים להשתמש בו רק לעיצוב שדות מהסוג java.util.Date או ה java.util.Calendar. יש תקווה, כפי שנראה בקרוב.

4. התאמה אישית של ג'קסון ObjectMapper

לכן, אם אנו רוצים להשתמש בסוגי תאריכים של Java 8 ו הגדר תבנית תאריך ברירת מחדל, ואז עלינו להסתכל ליצור Jackson2ObjectMapperBuilderCustomizer אפונה:

@Configuration class class ContactAppConfig {private static final String dateFormat = "yyyy-MM-dd"; סופי סטטי פרטי מחרוזת DateTimeFormat = "yyyy-MM-dd HH: mm: ss"; @Bean הציבור Jackson2ObjectMapperBuilderCustomizer jsonCustomizer () {בונה החזרה -> {builder.simpleDateFormat (dateTimeFormat); builder.serializers (LocalDateSerializer חדש (DateTimeFormatter.ofPattern (dateFormat))); builder.serializers (LocalDateTimeSerializer חדש (DateTimeFormatter.ofPattern (dateTimeFormat))); }; }}

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

אף על פי שגישה זו עשויה להראות מעט מסורבלת, הדבר הנחמד בה הוא שהיא פועלת הן עבור Java 8 והן עבור סוגי התאריכים הישנים.

5. מסקנה

במאמר זה בחנו מספר דרכים שונות לעיצוב תאריכי JSON ביישום Spring Boot.

כמו תמיד, אנו יכולים למצוא את קוד המקור של הדוגמאות ב- GitHub.


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