בניית יישום אינטרנט פשוט עם Boot Boot ו- Groovy

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

קִצבִּי יש מספר יכולות שנרצה להשתמש בהן ביישומי האינטרנט שלנו באביב.

לכן, במדריך זה, נבנה אפליקציית טוטו פשוטה עם Spring Boot ו- Groovy. כמו כן, נחקור את נקודות השילוב שלהם.

2. יישום טודו

היישום שלנו יכלול את התכונות הבאות:

  • צור משימה
  • ערוך את המשימה
  • מחק משימה
  • צפה במשימה ספציפית
  • צפו בכל המשימות

זה יהיה א יישום מבוסס REST ואנחנו נשתמש Maven ככלי הבנייה שלנו.

2.1. תלות Maven

בואו נכלול את כל התלות הנדרשת בתוכנו pom.xml קוֹבֶץ:

 org.springframework.boot spring-boot-starter-data-jpa 2.2.6.RELEASE org.springframework.boot spring-boot-starter-web 2.2.6.RELEASE org.codehaus.groovy groovy 3.0.3 org.springframework.boot האביב- boot-starter-test 2.2.6.RELEASE test com.h2database h2 1.4.200 זמן ריצה 

כאן היו לְרַבּוֹת קפיץ-אתחול-רשת לבניית נקודות קצה של REST, ו ייבוא קִצבִּי תלות לספק תמיכה גרובית לפרויקט שלנו.

עבור שכבת ההתמדה, אנו משתמשים spring-boot-starter-data-jpa, ו h2 הוא מסד הנתונים המשובץ.

כמו כן, עלינו לִכלוֹל תוסף gmavenplus עם כל המטרות ב pom.xml:

  // ... org.codehaus.gmavenplus gmavenplus-plugin 1.9.0 addSources addTestSources generateStubs compile createTestStubs compileTests removeStubs removeTestStubs 

2.2. מחלקת ישויות JPA

בוא נכתוב פשוט לעשות שיעור גרובי עם שלושה שדות - תְעוּדַת זֶהוּת, מְשִׁימָה, ו הושלם:

@Entity @Table (name = 'todo') מחלקה Todo {@Id @GeneratedValue (אסטרטגיה = GenerationType.IDENTITY) מזהה שלם @Column משימה מחרוזת @Column בוליאני הושלם}

הנה ה תְעוּדַת זֶהוּת שדה הוא המזהה הייחודי של המשימה. מְשִׁימָה מכיל את פרטי המשימה ו הושלם מראה אם ​​המשימה הושלמה או לא.

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

2.3. שכבת ההתמדה

בואו ליצור ממשק גרובי - TodoRepository אשר מיישמת מאגר Jpa. זה יטפל בכל פעולות ה- CRUD ביישום שלנו:

ממשק @ מאגר TodoRepository מרחיב את JpaRepository {}

2.4. שכבת השירות

ה TodoService הממשק מכיל את כל השיטות המופשטות הנדרשות לפעולת ה- CRUD שלנו:

ממשק TodoService {List findAll () Todo findById (Ingerger todoId) Todo saveTodo (Todo todo) Todo updateTodo (Todo todo) Todo deleteTodo (Ingerger todoId)}

ה TodoServiceImpl הוא כיתת יישום המיישמת את כל השיטות של TodoService:

מחלקה @ שירות TodoServiceImpl מיישם את TodoService {// ... @ רשימת רמות findAll () {todoRepository.findAll ()} @ Override Todo findById (Integer todoId) {todoRepository.findById todoId get ()} @Override Todo saveTodo {todoRepository.save todo} @Override Todo updateTodo (Todo todo) {todoRepository.save todo} @Override Todo deleteTodo (Integer todoId) {todoRepository.deleteById todoId}}

2.5. שכבת הבקר

עכשיו, בואו להגדיר את כל ממשקי ה- API של REST ב- TodoController שהוא שלנו @ RestController:

@RestController @RequestMapping ('todo') מחלקה ציבורית TodoController {@Autowired TodoService todoService @GetMapping List getAllTodoList () {todoService.findAll ()} @PostMapping Todo saveTodo (@RequestBody Todo todo) {todoSoDoToDo.support.to (@RequestBody Todo todo) {todoService.updateTodo todo} @DeleteMapping ('/ {todoId}') deleteTodo (@PathVariable Integer todoId) {todoService.deleteTodo todoId} @GetMapping ('/ {todoId }odo) Todo מספר שלם todoId) {todoService.findById todoId}}

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

2.6. אתחול היישום של אתחול האביב

כעת, בואו נכתוב שיעור עם השיטה העיקרית שתשמש להפעלת היישום שלנו:

מחלקה @ SpringBootApplication SpringBootGroovyApplication {static void main (String [] args) {SpringApplication.run SpringBootGroovyApplication, args}}

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

גַם, הסיומת .מעמד אין צורך בשום שיעור בגרובי בגלל זה אנו משתמשים ב- SpringBootGroovy יישום באופן ישיר.

עכשיו, בואו נגדיר את המעמד הזה ב pom.xml כפי ש שיעור התחלה:

 com.baeldung.app.SpringBootGroovyApplication 

3. הפעלת האפליקציה

לבסוף, היישום שלנו מוכן להפעלה. אנחנו צריכים פשוט להפעיל את SpringBootGroovy יישום מחלקה כיישום Java או הפעל את Maven build:

קפיץ אתחול: לרוץ

זה אמור להתחיל את היישום ב // localhost: 8080 ואנחנו צריכים להיות מסוגלים לגשת לנקודות הקצה שלה.

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

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

4.1. הגדרה ראשונית

בואו נגדיר שלושה משתנים סטטיים - API_ROOT, readingTodoId, ו writingTodoId בכיתה שלנו:

static API_ROOT = "// localhost: 8080 / todo" קריאה סטטית TodoId writing staticTodoId

הנה ה API_ROOT מכיל את כתובת ה- URL הבסיסית של האפליקציה שלנו. ה readingTodoId ו writingTodoId הם המפתחות העיקריים של נתוני הבדיקה שבהם נשתמש בהמשך לביצוע הבדיקה.

עכשיו בואו ניצור שיטה אחרת - populateDummyData () באמצעות ההערה @לפני השיעור לאכלוס נתוני הבדיקה:

@BeforeClass סטטי ריק ריק populateDummyData () {Todo readingTodo = Todo חדש (משימה: 'קריאה', isCompleted: false) Todo writingTodo = Todo חדש (משימה: 'Writing', isCompleted: false) תגובה סופית readResponse = RestAssured.given (). contentType (MediaType.APPLICATION_JSON_VALUE) .body (readingTodo) .post (API_ROOT) Todo cookingTodoResponse = readingResponse.as Todo.class readingTodoId = cookingTodoResponse.getId () תגובה סופית תגובהResponse = RestAssured.given () MediaType. Type. (writingTodo). post (API_ROOT) Todo writingTodoResponse = writingResponse.as Todo.class writingTodoId = writingTodoResponse.getId ()}

נאכלס גם משתנים - readingTodoId ו writingTodoId באותה שיטה לאחסון המפתח הראשי של הרשומות שאנחנו שומרים.

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

4.2. בדיקת פעולות CRUD

לאחר מכן, בואו נמצא את כל המשימות מרשימת המטלות:

@Test בטל כאשרGetAllTodoList_thenOk () {תגובה תגובה סופית = RestAssured.get (API_ROOT) assertEquals HttpStatus.OK.value (), response.getStatusCode () assertTrue response.as (List.class). גודל ()> 0}

לאחר מכן, בואו נמצא משימה ספציפית על ידי העברה readingTodoId שאכלסנו קודם:

@Test בטל whenGetTodoById_thenOk () {תגובה תגובה אחרונה = RestAssured.get ("$ API_ROOT / $ readingTodoId") assertEquals HttpStatus.OK.value (), response.getStatusCode () Todo todoResponse = תגובה. כ- .getId ()}

כאן השתמשנו באינטרפולציה לשרשור מחרוזת ה- URL.

יתר על כן, בואו ננסה לעדכן את המשימה ברשימת המטלות באמצעות readingTodoId:

@Test בטל כאשרUpdateTodoById_thenOk () {Todo todo = new Todo (id: readingTodoId, isCompleted: true) תגובה תגובה סופית = RestAssured.given () .contentType (MediaType.APPLICATION_JSON_VALUE) .body (todo) .put (API_RO). OK.value (), response.getStatusCode () Todo todoResponse = תגובה.כפי טוען Todo.class נכון todoResponse.getIsCompleted ()}

ואז מחק את המשימה ברשימת המטלות באמצעות writingTodoId:

@Test בטל כאשרDeleteTodoById_thenOk () {תגובה תגובה אחרונה = RestAssured.given () .delete ("$ API_ROOT / $ writingTodoId") assertEquals HttpStatus.OK.value (), response.getStatusCode ()}

לבסוף, אנו יכולים לשמור משימה חדשה:

@Test בטל כאשרSaveTodo_thenOk () {Todo todo = Todo new (task: 'Blogging', isCompleted: false) תגובה תגובה סופית = RestAssured.given () .contentType (MediaType.APPLICATION_JSON_VALUE). גוף (todo). Post (API_ROOT) assertEquals HttpStatus.OK.value (), response.getStatusCode ()}

5. מסקנה

במאמר זה השתמשנו ב- Groovy ו- Spring Boot לבניית יישום פשוט. ראינו גם כיצד ניתן לשלב אותם יחד והדגמנו כמה מהתכונות המגניבות של גרובי עם דוגמאות.

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


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