Spring @RequestMapping הערות קיצור דרך חדשות

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

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

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

2. ביאורים חדשים

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

@RequestMapping (value = "/ get / {id}", method = RequestMethod.GET)

הגישה החדשה מאפשרת לקצר זאת פשוט:

@GetMapping ("/ get / {id}")

אביב תומך כיום בחמישה סוגים של הערות מובנות לטיפול בסוגים שונים של שיטות בקשת HTTP נכנסות קבל, פרסם, שים, מחק ו תיקון. ההערות האלה הן:

  • @GetMapping
  • @ פוסט מיפוי
  • @ PutMapping
  • @DeleteMapping
  • @ תיקון מיפוי

מוועידת השמות אנו יכולים לראות שכל הערה נועדה לטפל בסוג שיטת בקשה נכנסת בהתאמה, כלומר @GetMapping משמש לטיפול לקבל סוג של שיטת בקשה, @ פוסט מיפוי משמש לטיפול הודעה סוג של שיטת בקשה וכו '.

3. איך זה עובד

כל ההערות הנ"ל כבר מסומנות באופן פנימי עם @ בקשת מיפוי והערך בהתאמה ב- שיטה אֵלֵמֶנט.

לדוגמא, אם נסתכל על קוד המקור של @GetMapping ביאור, אנו יכולים לראות שהוא כבר מצויר עם RequestMethod.GET באופן הבא:

@Target ({java.lang.annotation.ElementType.METHOD}) @Retention (RetentionPolicy.RUNTIME) @Documented @RequestMapping (method = {RequestMethod.GET}) ציבורי @ ממשק GetMapping {// קודים מופשטים}

כל שאר ההערות נוצרות באותו אופן, כלומר @ פוסט מיפוי מסומן עם RequestMethod.POST, @ PutMapping מסומן עם RequestMethod.PUT, וכו '

קוד המקור המלא של ההערות זמין כאן.

4. יישום

בואו ננסה להשתמש בהערות אלה כדי לבנות יישום REST מהיר.

לידיעתך, מכיוון שהיינו משתמשים ב- Maven כדי לבנות את הפרויקט ו- Spring MVC כדי ליצור את היישום שלנו, עלינו להוסיף תלות נחוצה pom.xml:

 org.springframework spring-webmvc 5.2.2.RELEASE 

הגרסה האחרונה של אביב-webmvc זמין במאגר Central Maven.

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

4.1. @GetMapping

@GetMapping ("/ get") ציבורי @ ResponseBody ResponseEntity get () {החזר ResponseEntity חדש ("GET Response", HttpStatus.OK); } 
@GetMapping ("/ get / {id}") ציבורי @ResponseBody ResponseEntity getById (@PathVariable מזהה מחרוזת) {להחזיר ResponseEntity חדש ("GET Response:" + id, HttpStatus.OK); }

4.2. @ פוסט מיפוי

@PostMapping ("/ post") public @ResponseBody ResponseEntity post () {return new ResponseEntity ("POST Response", HttpStatus.OK); }

4.3. @ PutMapping

@ PutMapping ("/ put") ציבורי @ ResponseBody ResponseEntity put () {להחזיר ResponseEntity חדש ("תגובה PUT", HttpStatus.OK); }

4.4. @DeleteMapping

@DeleteMapping ("/ delete") ציבורי @ResponseBody ResponseEntity מחק () {להחזיר ResponseEntity חדש ("מחק תגובה", HttpStatus.OK); }

4.5. @ תיקון מיפוי

@PatchMapping ("/ patch") תיקון ציבורי @ResponseBody ResponseEntity () {להחזיר ResponseEntity חדש ("תגובה PATCH", HttpStatus.OK); }

נקודות שיש לציין:

  • השתמשנו בהערות הדרושות לטיפול בשיטות HTTP נכנסות נכונות עם URI. לדוגמה, @GetMapping לטפל ב- "URI", @ פוסט מיפוי לטפל ב- "/ post" URI וכן הלאה

  • מכיוון שאנו מייצרים יישום מבוסס REST, אנו מחזירים מחרוזת קבועה (ייחודית לכל סוג בקשה) עם קוד תגובה 200 כדי לפשט את היישום. השתמשנו באביב @ResponseBody ביאור במקרה זה.
  • אם היינו צריכים לטפל במשתנה של נתיבי כתובת אתר כלשהי, אנחנו פשוט יכולים לעשות את זה בצורה הרבה פחות שהיינו עושים במקרה של שימוש @ בקשת מיפוי.

5. בדיקת היישום

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

בואו פשוט את מקרה הבדיקה לדוגמא של @ GetMapping:

@Test ציבורי בטל giventUrl_whenGetRequest_thenFindGetResponse () זורק חריג {MockHttpServletRequestBuilder בונה = MockMvcRequestBuilders .get ("/ get"); ResultMatcher contentMatcher = MockMvcResultMatchers.content (). מחרוזת ("תגובת GET"); this.mockMvc.perform (בונה) .andExpect (contentMatcher) .andExpect (MockMvcResultMatchers.status (). isOk ()); }

כפי שאנו רואים, אנו מצפים למיתר קבוע "קבל תגובהברגע שפגענו ב לקבל כתובת אתר "/ get".

עכשיו, בואו ניצור את מקרה הבדיקה לבדיקה @ פוסט מיפוי:

@Test הציבור בטל givenUrl_whenPostRequest_thenFindPostResponse () זורק חריג {MockHttpServletRequestBuilder בונה = MockMvcRequestBuilders .post ("/ פוסט"); ResultMatcher contentMatcher = MockMvcResultMatchers.content (). מחרוזת ("תגובת POST"); this.mockMvc.perform (בונה) .andExpect (contentMatcher) .andExpect (MockMvcResultMatchers.status (). isOk ()); }

באותו אופן, יצרנו את שאר מקרי הבדיקה כדי לבדוק את כל שיטות ה- HTTP.

לחלופין, אנחנו תמיד יכולים להשתמש בכל לקוח REST משותף, למשל, PostMan, RESTClient וכו ', כדי לבדוק את היישום שלנו. במקרה כזה, עלינו להקפיד על בחירת סוג שיטת HTTP נכון תוך שימוש בלקוח rest. אחרת, זה היה זורק מצב שגיאה 405.

6. מסקנה

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

כמו תמיד, אתה יכול למצוא את קוד המקור של הדרכה זו בפרויקט Github.