Spring boot ci da diversi metodi per accedere alle risorse disponibili. Una delle più semplici prevede l’uso della annotion @Value e la classe Resouse
1 2 |
@Value("classpath:json/tipologie.json") Resource tipologicheJson; |
Nell’esempio sopra riportato sto definendo un file tipologie.json disponibile nel classpath dentro la cartella json e posso accedervi usando i meto della classe Resource.
Fin qui tutto bene, se lanciamo con maven la direttiva spring-boot: run il sistema funziona correttamente ma se rilasciamo il nostro applicativo in formato jar ecco che otteniamo questa eccezione quando cerchiamo di accedere al file
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception
java.io.FileNotFoundException: class path resource [json/tipologie.json] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/nome,.jar/BOOT-INF/classes!/json/tipologie.json
Per risolvere il problema occorre leggere il dato usando il metodo getInputStrean che mi garantisce la lettura del file anche dentro il jar
InputStream inputStream = tipologicheJson.getInputStream();