מגף אביב הצורך ומפיק את JSON

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

במדריך זה אנו נראה כיצד לבנות שירות REST לצרוך ולהפיק תוכן JSON באמצעות Spring Boot.

אנו נסתכל גם כיצד נוכל להשתמש בסמנטיקה של HTTP RESTful בקלות.

לשם פשטות, לא נכלול שכבת התמדה, אך Spring Data הופך את זה לפשוט גם להוסיף.

2. שירות מנוחה

כתיבת שירות JSON REST ב- Spring Boot היא פשוטה, מכיוון שזו ברירת המחדל שלה כאשר ג'קסון נמצא בכיתה:

@RestController @RequestMapping ("/ סטודנטים") תלמיד כיתת סטודנטים {@ שירות שירות סטודנטים פרטי מאושר; @GetMapping ("/ {id}") סטודנט ציבורי לקרוא (@PathVariable מזהה מחרוזת) {return service.find (id); } ... 

על ידי ביאור שלנו StudentController עם @ RestController, אמרנו ל- Spring Boot לכתוב את סוג ההחזרה של ה- לקרוא שיטה לגוף התגובה. מכיוון שיש לנו גם א @ בקשת מיפוי ברמת הכיתהזה יהיה זהה לכל שיטות ציבוריות נוספות שנוסיף.

אם כי פשוט, גישה זו חסרה סמנטיקה של HTTP. לדוגמא, מה צריך לקרות אם לא נמצא את התלמיד המבוקש? במקום להחזיר קוד סטטוס 200 או 500, אולי נחזיר 404.

בואו נסתכל כיצד להפעיל שליטה רבה יותר על תגובת ה- HTTP עצמה ובתורנו להוסיף כמה התנהגויות RESTful אופייניות לבקר שלנו.

3. צור

כאשר עלינו לשלוט בהיבטים של התגובה מלבד הגוף - כמו קוד המצב - אנו יכולים להחזיר א תגובה תגובה:

@PostMapping ("/") ResponseEntity ציבורי ליצור (סטודנט סטודנט @RequestBody) זורק URISyntaxException {סטודנט createdStudent = service.create (סטודנט); אם (createdStudent == null) {return ResponseEntity.notFound (). build (); } אחר {URI uri = ServletUriComponentsBuilder.fromCurrentRequest () .path ("/ {id}") .buildAndExpand (createdStudent.getId ()) .toUri (); החזר ResponseEntity.created (uri) .body (createdStudent); }} 

הנה, אנחנו עושים הרבה יותר מאשר רק להחזיר את הנוצר סטוּדֶנט בתגובה. בנוסף, אנו מגיבים עם סטטוס HTTP ברור סמנטי, ואם יצליחה היצירה, URI למשאב החדש.

4. קרא

כאמור, אם אנו רוצים לקרוא יחיד סטוּדֶנט, ברור יותר מבחינה סמנטית להחזיר 404 אם איננו יכולים למצוא את התלמיד:

@GetMapping ("/ {id}") ResponseEntity ציבורי לקרוא (@PathVariable ("id") מזהה ארוך) {סטודנט foundStudent = service.read (id); אם (foundStudent == null) {return ResponseEntity.notFound (). build (); } אחר {return ResponseEntity.ok (foundStudent); }} 

כאן אנו יכולים לראות בבירור את ההבדל מההתחלה שלנו לקרוא() יישום.

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

5. עדכון

העדכון דומה מאוד ליצירה, אלא שהוא ממופה ל- PUT במקום POST, ו- URI מכיל תְעוּדַת זֶהוּת של המשאב שאנו מעדכנים:

@PutMapping ("/ {id}") עדכון ResponseEntity ציבורי (@ סטודנט סטודנט סטודנט, @PathVariable מזהה ארוך) {סטודנט updatedStudent = service.update (מזהה, סטודנט); אם (updatedStudent == null) {return ResponseEntity.notFound (). build (); } אחר {return ResponseEntity.ok (updatedStudent); }} 

6. מחק

פעולת המחיקה ממופה לשיטת DELETE. URI מכיל גם את תְעוּדַת זֶהוּת של המשאב:

@DeleteMapping ("/ {id}") תגובה תגובה ציבורית ציבורי deleteStudent (@PathVariable מזהה ארוך) {service.delete (id); החזר ResponseEntity.noContent (). build (); } 

לא יישמנו טיפול בשגיאות ספציפיות מכיוון ש- לִמְחוֹק() השיטה למעשה נכשלת על ידי זריקת יוצא מן הכלל.

7. מסקנה

במאמר זה ראינו כיצד לצרוך ולהפיק תוכן JSON בשירות CRUD REST טיפוסי שפותח עם Spring Boot. בנוסף, הדגמנו כיצד ליישם בקרה נכונה של מצב התגובה וטיפול בשגיאות.

כדי לשמור על דברים פשוטים, לא נכנסנו הפעם להתמדה, אך Spring Data REST מספק דרך מהירה ויעילה לבנות שירות נתונים RESTful.

קוד המקור השלם לדוגמא זמין ב- GitHub.


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