Ich versuche, meine Spring MVC (nicht Spring Boot) Anwendung mit Firebase zu verbinden. Meine Anwendung Ordnerstruktur sieht wie folgt aus:Wie Sie die Firebase ServiceAccount-JSON-Ressource mit Spring MVC korrekt laden?
Das Problem ist, dass ich weiß nicht, wo die api Schlüssel JSON-Datei zu platzieren, wie die Ressource zu laden, und die korrekte Reihenfolge der Methodenaufrufe.
Ich habe versucht, die Ressource wie unten gezeigt zu laden. Vorher habe ich auch versucht mit ClassLoader es aus dem WEB-INF-Ordner zu laden und es funktionierte, aber änderte den Code und erhielt weiterhin NullPointer Exception (warum nicht FileNotFound Exception?) Für den InputStream und konnte den vorherigen Zustand nicht wiederherstellen.
Mit dem aktuellen Zustand empfange ich weiterhin FileNotFound Exception, da ich nicht in der Lage bin, die Ressource zu laden, egal wie viel ich "Spring MVC load resource" googelte und wie ich die "init" -Methode des Dienstkontos mit überprüft @PostConstruct läuft nicht beim Starten des Servers.
Ich verstehe, dass ich in der Lage sein sollte, die Ressource zu laden und die "init" -Methode aufzurufen, damit es funktioniert. (Ich nehme an, es ist genug, um es einmal nach dem Erstellen der Bean und vor der Verwendung von Firebase-Methoden zu nennen) Aber ich konnte einfach nicht mit einer funktionierenden Implementierung kommen.
habe ich Beispiele von hier: https://github.com/savicprvoslav/Spring-Boot-starter (Ende der Seite)
Mein Controller-Klasse:
@Controller
@RequestMapping("/firebase")
public class FirebaseController {
@Autowired
private FirebaseService firebaseService;
@GetMapping(value="/upload/maincategories")
public void uploadMainRecordCategories() {
firebaseService.uploadMainRecordCategories();
}
Mein Service Klasse:
@Service
public class FirebaseServiceBean implements FirebaseService {
@Value("/api.json")
Resource apiKey;
@Override
public void uploadMainRecordCategories() {
// do something
}
@PostConstruct
public void init() {
try (InputStream serviceAccount = apiKey.getInputStream()) {
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(serviceAccount))
.setDatabaseUrl(FirebaseStringValue.DB_URL).build();
FirebaseApp.initializeApp(options);
} catch (IOException e) {
e.printStackTrace();
}
}
}