Vytvorenie jednoduchej webovej aplikácie s programami Spring Boot a Groovy

1. Prehľad

Groovy má množstvo funkcií, ktoré by sme mohli chcieť použiť v našich webových aplikáciách na jar.

V tomto tutoriále teda zostavíme jednoduchú aplikáciu s funkciami Spring Boot a Groovy. Preskúmame tiež ich integračné body.

2. Aplikácia Todo

Naša aplikácia bude mať nasledujúce funkcie:

  • Vytvorte úlohu
  • Upraviť úlohu
  • Odstrániť úlohu
  • Zobraziť konkrétnu úlohu
  • Zobraziť všetky úlohy

Bude to Aplikácia založená na REST a použijeme Maven ako náš nástroj na vytváranie.

2.1. Maven závislosti

Zahrňme všetky závislosti požadované v našom pom.xml spis:

 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 test štartéra pružiny-boot-startéra 2.2.6. Test UVEREJNENIA com.h2database h2 1.4.200 runtime 

Tu sme počítajúc do toho spring-boot-starter-web na zostavenie koncových bodov RESTa dováža groovy závislosť poskytovať podporu projektu Groovy.

Pre vrstvu perzistencie používame spring-boot-starter-data-jpaa h2 je vložená databáza.

Tiež musíme zahrnúť gmavenplus-plugin so všetkými cieľmi v pom.xml:

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

2.2. Trieda entity JPA

Poďme napísať jednoduchý Robiť Groovy trieda s tromi poľami - id, úloha, a je dokončený:

@Entity @Table (name = 'todo') trieda Todo {@Id @GeneratedValue (strategy = GenerationType.IDENTITY) Integer id @Column String task @Column Boolean isCompleted}

Tu je id pole je jedinečný identifikátor úlohy. úloha obsahuje podrobnosti úlohy a je dokončený ukazuje, či je úloha splnená alebo nie.

Všimni si, keď do poľa neposkytneme modifikátory prístupu, potom kompilátor Groovy nastaví toto pole ako súkromné ​​a vygeneruje preň aj metódy getra a setra.

2.3. Vrstva perzistencie

Poďme vytvoriť Groovy rozhranie - TodoRepository ktorý realizuje JpaRepository. Postará sa o všetky operácie CRUD v našej aplikácii:

@Repository rozhranie TodoRepository rozširuje JpaRepository {}

2.4. Servisná vrstva

The TodoService rozhranie obsahuje všetky abstraktné metódy požadované pre našu operáciu CRUD:

rozhranie TodoService {List findAll () Todo findById (Integer todoId) Todo saveTodo (Todo todo) Todo updateTodo (Todo todo) Todo deleteTodo (Integer todoId)}

The TodoServiceImpl je trieda implementácie ktorý implementuje všetky metódy z TodoService:

@Service class TodoServiceImpl implementuje TodoService {// ... @Override List findAll () {todoRepository.findAll ()} @Override Todo findById (Integer todoId) {todoRepository.findById todoId get ()} todoId get ()} {todoRepository.save todo} @Override Todo updateTodo (Todo todo) {todoRepository.save todo} @Override Todo deleteTodo (Integer todoId) {todoRepository.deleteById todoId}}

2.5. Vrstva radiča

Teraz poďme definovať všetky REST API v TodoController ktorý je náš @RestController:

@RestController @RequestMapping ('todo') verejná trieda TodoController {@Autowired TodoService todoService @GetMapping List getAllTodoList () {todoService.findAll ()} @PostMapping Todo saveTodo (@RequestBoDo to) (@RequestBody Todo todo) {todoService.updateTodo todo} @DeleteMapping ('/ {todoId}') deleteTodo (@PathVariable Integer todoId) {todoService.deleteTodo todoId} @GetMapping ('}} Celé číslo todoId) {todoService.findById todoId}}

Tu sme definovali päť koncových bodov, ktoré môže užívateľ volať na vykonávanie operácií CRUD.

2.6. Zavádzanie aplikácie Spring Boot

Poďme teraz napísať triedu s hlavnou metódou, ktorá sa použije na spustenie našej aplikácie:

@SpringBootApplication - trieda SpringBootGroovyApplication {static void main (String [] args) {SpringApplication.run SpringBootGroovyApplication, args}}

Všimni si, v Groovy je použitie zátvoriek voliteľné pri volaní metódy odovzdaním argumentov - a to robíme v príklade vyššie.

Tiež prípona .trieda nie je potrebný pre žiadnu triedu v Groovy preto používame SpringBootGroovyApplication priamo.

Teraz definujme túto triedu v pom.xml ako štart-trieda:

 com.baeldung.app.SpringBootGroovyApplication 

3. Spustenie aplikácie

Nakoniec je naša aplikácia pripravená na spustenie. Mali by sme jednoducho spustiť SpringBootGroovyApplication triedy ako aplikácia Java alebo spustite zostavenie Maven:

jar-topánka: beh

To by malo spustiť aplikáciu dňa // localhost: 8080 a mali by sme mať prístup k jeho koncovým bodom.

4. Testovanie aplikácie

Naša aplikácia je pripravená na testovanie. Vytvorme triedu Groovy - TodoAppTest otestovať našu aplikáciu.

4.1. Pôvodné nastavenie

Definujme tri statické premenné - API_ROOT, readingTodoId, a writingTodoId v našej triede:

static API_ROOT = "// localhost: 8080 / todo" statické readingTodoId statické writeTodoId

Tu je API_ROOT obsahuje koreňovú adresu URL našej aplikácie. The readingTodoId a writingTodoId sú primárne kľúče našich testovacích údajov, ktoré neskôr použijeme na vykonanie testovania.

Poďme teraz vytvoriť inú metódu - populateDummyData () pomocou anotácie @BeforeClass na vyplnenie údajov z testu:

@BeforeClass static void populateDummyData () {Todo readingTodo = new Todo (úloha: 'Reading', isCompleted: false) Todo writingTodo = new Todo (task: 'Writing', isCompleted: false) final Response readingResponse = RestAssured.given (). contentType (MediaType.APPLICATION_JSON_VALUE) .body (readingTodo) .post (API_ROOT) Todo cookingTodoResponse = readingResponse.as Todo.class readingTodoId = cookingTodoResponse.getId () final Response writingResponse =). (writingTodo) .post (API_ROOT) Todo writingTodoResponse = writingResponse.as Todo.class writingTodoId = writingTodoResponse.getId ()}

Naplníme tiež premenné - readingTodoId a writingTodoId rovnakým spôsobom na uloženie primárneho kľúča záznamov, ktoré ukladáme.

Všimni si, v Groovy môžeme fazuľu inicializovať aj pomocou pomenovaných parametrov a predvoleného konštruktora ako robíme pre fazuľa ako readingTodo a writingTodo vo vyššie uvedenom úryvku.

4.2. Testovanie operácií CRUD

Ďalej nájdeme všetky úlohy zo zoznamu úloh:

@Test void whenGetAllTodoList_thenOk () {final Response response = RestAssured.get (API_ROOT) assertEquals HttpStatus.OK.value (), response.getStatusCode () assertTrue response.as (List.class) .size ()> 0}

Potom nájdeme konkrétnu úlohu odovzdaním readingTodoId ktoré sme naplnili skôr:

@Test void whenGetTodoById_thenOk () {final Response response = RestAssured.get ("$ API_ROOT / $ readingTodoId") assertEquals HttpStatus.OK.value (), response.getStatusCode () Todo todoResponse = response.as Todo.class .getId ()}

Tu sme použili interpoláciu na zreťazenie reťazca URL.

Ďalej sa pokúsime aktualizovať úlohu v zozname úloh pomocou readingTodoId:

@Test void whenUpdateTodoById_thenOk () {Todo todo = new Todo (id: readingTodoId, isCompleted: true) final Response response = RestAssured.given () .contentType (MediaType.APPLICATION_JSON_VALUE) .body (todo_) OK.value (), response.getStatusCode () Todo todoResponse = response.as Todo.class assertTrue todoResponse.getIsCompleted ()}

A potom vymažte úlohu v zozname úloh pomocou writingTodoId:

@Test void whenDeleteTodoById_thenOk () {final Response response = RestAssured.given () .delete ("$ API_ROOT / $ writingTodoId") assertEquals HttpStatus.OK.value (), response.getStatusCode ()}

Na záver môžeme uložiť novú úlohu:

@Test void whenSaveTodo_thenOk () {Todo todo = new Todo (task: 'Blogging', isCompleted: false) final Response response = RestAssured.given () .contentType (MediaType.APPLICATION_JSON_VALUE) .body (todo) .post (API_ROOT) HttpStatus.OK.value (), response.getStatusCode ()}

5. Záver

V tomto článku sme použili Groovy a Spring Boot na vytvorenie jednoduchej aplikácie. Tiež sme videli, ako je možné ich navzájom integrovať, a na príkladoch sme demonštrovali niektoré z vynikajúcich funkcií aplikácie Groovy.

Celý zdrojový kód príkladu je ako vždy k dispozícii na serveri GitHub.


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