Primi Passi con Spring Boot

Il progetto Spring Boot consente di semplificare enormemente la realizzazione di applicazioni stand-alone basate sul framework Spring. In questo articolo vediamo come creare una applicazione Spring Boot per l’esposizione di servizi REST. Tali servizi sono stati affrontati nei post Primi Passi con JAX-RSIniezione dei Parametri in JAX-RSGestione Tipi non Primitivi in JAX-RS.

Creazione del Progetto

Per creare il progetto utilizzeremo Maven ed in particolare l’archetype maven-archetype-quickstart. Apriamo quindi una shell, posizioniamoci sulla cartella di lavoro e eseguiamo il seguente goal maven di generazione:

Apriamo quindi Eclipse ed importiamo un progetto maven esistente nel workspace. Eliminiamo la classe AppTest.java di cui non abbiamo bisogno.

Procediamo quindi modificando il POM file del progetto inseriamo il tag <parent> verso spring-boot-starter-parent, in modo da ereditare alcune dipendenze e configurazioni di default come meglio specificato nella documentazione ufficiale.

Inoltre inseriamo la starter dependency spring-boot-starter-web che include le principali dipendenze per le web application in Spring (RESTful, Spring MVC, etc) e che utilizza Tomcat come container.

Infine inseriamo il plug-in spring-boot-maven-plugin che introduce specifico goal maven per la gestione di Spring boot.

Il POM quindi avrà il seguente aspetto:

La Classe Main

Rinominiamo la classe App.java generata da maven in Application.java, per conformità alle best practice di Spring Boot, ed annotiamola con l’annotazione @SpringBootApplication, che è equivalente all’utilizzo delle annotazioni @Configuration, @EnableAutoConfiguration e @ComponentScan che in progetti Spring Boot sono generalmente utilizzate insieme. In particolare:

  • @Configuration permette alla classe di definire dei metodi per la creazione di bean gestiti da container Spring utilizzando l’annotazione @Bean;
  • @ComponentScan istruisce Spring per cercare tutte le classi annotate con @Component@Service, @Controller@Repository ecc.;
  • @EnableAutoConfiguration abilita il meccanismo di autoconfigurazione alla base di Spring Boot che fa sì che in base alle librerie presenti nel classpath Spring Boot inserisca automaticamente nel proprio container un insieme di bean.

Infine modifichiamo il metodo main() in modo da avviare Spring Boot indicando la classe Application.java come entry point. La classe avrà il seguente aspetto:

Esecuzione dell’Applicazione

Torniamo alla shell e posizioniamoci nella cartella di root del nostro progetto, dove è collocato il file pom.xml, quindi utilizziamo il plug-in spring-boot-maven-plugin per eseguire il progetto utilizzando il goal run:

Dopo una prima fase di compilazione noterete che viene avviato il server Tomcat, che è quindi enbedded nell’applicazione, e che rimane in ascolto sulla porta 8080. Se proviamo ad inserire in un browser l’url http://localhost:8080 verrà visualizzata una pagina di errore che ci conferma il corretto avvio dell’applicazione, ma ci dice anche che l’applicazione è “vuota”.

L’alternativa all’utilizzo del plug-in è quella di pacchettizzare l’applicazione in un jar utilizzando l’istruzione:

che genera l’archivio nella cartella target del progetto, ed eseguire quindi il jar con l’istruzione:

Questo consente di avviare l’applicazione anche in un ambiente in cui maven non è presente, come generalmente avviene in esercizio.

In ambiente Eclipse un modo rapido di avvio è semplicemente quello di collocarsi sulla classe Application e, dal menù contestuale, selezionare Run As -> Java Application.

I Servizi REST

Implementiamo ora un servizio REST di esempio (molto banale) che l’applicazione deve esporre. Per farlo creiamo nel progetto una nuova classe MessageController ed annotiamola con @RestController. Si tratta di una annotazione che estende @Controller e che indica a Spring di convertire gli oggetti restituiti di metodi della classe in JSON o XML.

Successivamente inseriamo nella classe il primo controller method getMessages() che dovrà servire una richiesta HTTP su uno specifico endpoint. Il model Message non è riportato per semplicità.

Il metodo è annotato con @RequestMapping che informa Spring che il metodo è in grado di rispondere alle richieste http. I parametri dell’annotazione configurano ulteriormente il controller method indicando:

  • l’endpoint cui il metodo e collegato (context path);
  • il tipo di metodo http a cui risponde (GET, POST, etc.)
  • il tipo di conversione da effettuare sull’oggetto restituito dal metodo.

La classe ResponseEntity è un wrapper che Spring converte in una response http, mentre il tipo generico con cui è qualificato indica il tipo degli oggetti che saranno inseriti nel body della response. Nel nostro caso una collezione di messaggi.

Procediamo avviando nuovamente l’applicazione e questa volta inserendo nel browser l’url http://localhost:8080/api/messages  compariranno i nostri messaggi in formato JSON:

Per completezza implementiamo un secondo metodo per il recupero di un messaggio specifico, dal quale impariamo come utilizzare l’annotazione @PathVariable per estrarre parametri dall’end-point del servizio e come restituire status differenti dal solito OK corrispondente allo status code 200.

Tornate al browser ed inserite l’url http://localhost:8080/api/messages/1 per visualizzare il JSON del primo messaggio.

Codice Sorgente

Il codice sorgente dell’esempio è scaricabile qui javaboss-boot.

© 2018 Java Boss - Theme by HappyThemes