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.