Een eenvoudige webapplicatie bouwen met Spring Boot en Groovy

1. Overzicht

Groovy heeft een aantal mogelijkheden die we misschien willen gebruiken in onze Spring-webapplicaties.

Dus in deze tutorial bouwen we een eenvoudige todo-applicatie met Spring Boot en Groovy. We zullen ook hun integratiepunten onderzoeken.

2. Todo-applicatie

Onze applicatie heeft de volgende kenmerken:

  • Maak een taak
  • Bewerk taak
  • Taak verwijderen
  • Bekijk specifieke taak
  • Bekijk alle taken

Het zal een REST-gebaseerde applicatie en we zullen gebruiken Maven als onze bouwtool.

2.1. Afhankelijkheden van Maven

Laten we alle vereiste afhankelijkheden opnemen in onze pom.xml het dossier:

 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 spring-boot-starter-test 2.2.6.RELEASE test com.h2database h2 1.4.200 runtime 

Hier waren inclusief spring-boot-starter-web om REST-eindpunten te bouwen, en importeren van het groovy afhankelijkheid om Groovy-ondersteuning te bieden aan ons project.

Voor de persistentielaag gebruiken we spring-boot-starter-data-jpa, en h2 is de ingesloten database.

We moeten ook omvatten gmavenplus-plugin met alle doelen in de pom.xml:

  // ... org.codehaus.gmavenplus gmavenplus-plugin 1.9.0 addSources addTestSources genererenStubs compileren genererenTestStubs compilerenTests removeStubs removeTestStubs 

2.2. JPA Entiteitsklasse

Laten we een simpel schrijven Te doen Groovy klas met drie velden - ID kaart, taak, en is voltooid:

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

Hier de ID kaart veld is de unieke identificatie van de taak. taak bevat de details van de taak en is voltooid laat zien of de taak is voltooid of niet.

Let erop dat, wanneer we geen toegangsmodificatoren voor het veld verstrekken, zal de Groovy-compiler dat veld als privé maken en er ook getter- en setter-methoden voor genereren.

2.3. De persistentielaag

Laten we maak een Groovy-interface - TodoRepository die implementeert JpaRepository. Het zorgt voor alle CRUD-bewerkingen in onze applicatie:

@Repository-interface TodoRepository breidt JpaRepository uit {}

2.4. De servicelaag

De TodoService interface bevat alle abstracte methoden die nodig zijn voor onze CRUD-bewerking:

interface TodoService {Lijst findAll () Todo findById (Geheel getal todoId) Todo saveTodo (Todo todo) Todo updateTodo (Todo todo) Todo deleteTodo (Geheel getal todoId)}

De TodoServiceImpl is een implementatieklasse die alle methoden van TodoService:

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

2.5. De controllerlaag

Laten we nu definieer alle REST API's in het TodoController dat is onze @RestController:

@RestController @RequestMapping ('todo') openbare klasse TodoController {@Autowired TodoService todoService @GetMapping List getAllTodoList () {todoService.findAll ()} @PostMapping Todo saveTodo (@RequestoService.findAll) {todoService.findAll ()} @PostMapping Todo saveTodo (@RequestoPodoTodo todo todo todo todo todo todo todo todo todo (@RequestBody Todo todo) {todoService.updateTodo todo} @DeleteMapping ('/ {todoId}') deleteTodo (@PathVariable Integer todoId) {todoService.deleteTodo todoId} @GetMapping '@GetMathoVodydari' Geheel getal todoId) {todoService.findById todoId}}

Hier hebben we vijf eindpunten gedefinieerd die de gebruiker kan aanroepen om CRUD-bewerkingen uit te voeren.

2.6. Bootstrapping van de Spring Boot-applicatie

Laten we nu een klasse schrijven met de hoofdmethode die zal worden gebruikt om onze applicatie te starten:

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

Let erop dat, in Groovy is het gebruik van haakjes optioneel bij het aanroepen van een methode door argumenten door te geven - en dit is wat we doen in het bovenstaande voorbeeld.

Ook, het achtervoegsel .klasse is niet nodig voor elke les in Groovy daarom gebruiken we de SpringBootGroovyApplication direct.

Laten we deze klasse nu definiëren in pom.xml net zo begin de les:

 com.baeldung.app.SpringBootGroovyApplication 

3. De toepassing uitvoeren

Eindelijk is onze applicatie klaar voor gebruik. We zouden gewoon het SpringBootGroovyApplication class als de Java-applicatie of voer de Maven-build uit:

spring-boot: rennen

Dit zou de applicatie moeten starten // localhost: 8080 en we zouden toegang moeten hebben tot de eindpunten.

4. Testen van de applicatie

Onze applicatie is klaar om te testen. Laten we een Groovy-klas maken - TodoAppTest om onze applicatie te testen.

4.1. Initiële setup

Laten we drie statische variabelen definiëren - API_ROOT, ReadingTodoId, en writingTodoId in onze klas:

static API_ROOT = "// localhost: 8080 / todo" statische readingTodoId statisch schrijvenTodoId

Hier de API_ROOT bevat de root-URL van onze app. De readingTodoId en writingTodoId zijn de belangrijkste sleutels van onze testgegevens die we later zullen gebruiken om tests uit te voeren.

Laten we nu een andere methode maken - populateDummyData () door de annotatie te gebruiken @Voor klas om de testgegevens in te vullen:

@BeforeClass static void populateDummyData () {Todo readingTodo = nieuwe Todo (taak: 'Reading', isCompleted: false) Todo writingTodo = nieuwe Todo (taak: 'Schrijven', 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 = RestAssured.given (). (writingTodo) .post (API_ROOT) Todo writingTodoResponse = writingResponse.as Todo.class writingTodoId = writingTodoResponse.getId ()}

We vullen ook variabelen in - readingTodoId en writingTodoId op dezelfde manier om de primaire sleutel op te slaan van de records die we opslaan.

Let erop dat, in Groovy kunnen we bonen ook initialiseren door benoemde parameters en de standaard constructor te gebruiken zoals we doen voor bonen zoals readingTodo en schrijvenTodo in het bovenstaande fragment.

4.2. CRUD-operaties testen

Laten we vervolgens alle taken uit de takenlijst zoeken:

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

Laten we vervolgens een specifieke taak zoeken door te passen readingTodoId die we eerder hebben ingevuld:

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

Hier hebben we interpolatie gebruikt om de URL-reeks samen te voegen.

Laten we verder proberen om de taak in de takenlijst bij te werken met readingTodoId:

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

En verwijder vervolgens de taak in de takenlijst met writingTodoId:

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

Eindelijk kunnen we een nieuwe taak opslaan:

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

5. Conclusie

In dit artikel hebben we Groovy en Spring Boot gebruikt om een ​​eenvoudige applicatie te bouwen. We hebben ook gezien hoe ze samen kunnen worden geïntegreerd en hebben enkele van de coole functies van Groovy met voorbeelden gedemonstreerd.

Zoals altijd is de volledige broncode van het voorbeeld beschikbaar op GitHub.


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