Erstellen wir eine REST-API mit SpringBoot + MongoDB

Was ist dieser Artikel?

Dies ist eine praktische Seite zum Erstellen einer REST-API mithilfe von Spring Boot unter Verwendung von MongoDB als Datenspeicher. Da es sich um einen Trainingsansturm handelt, möchten wir das Erleben vereinfachen, indem wir die Abläufe nacheinander zusammenfassen und kopieren.

Der Inhalt selbst ist fast das folgende Kopieren und Einfügen. Ich wollte Gradle verwenden, deshalb habe ich den Inhalt ein wenig geändert. https://stackabuse.com/spring-data-mongodb-tutorial/

Annahme

Implementierungsübersicht

Erstellen Sie eine REST-API mit Spring Boot. Verwenden Sie MongoDB für den Datenspeicher und CRUD die MongoDB-Daten auf Anfrage

Das fertige Produkt ist auf dem GitHub unten aufgeführt. Wenn es nicht funktioniert, lesen Sie es bitte. https://github.com/theMistletoe/MongoDB-SpringBoot-sample

Praktisches Verfahren

MongoDB-Setup

Melden Sie sich für MongoDB an https://account.mongodb.com/account/register

Klicken Sie nach der Anmeldung auf "Cluster erstellen".

image.png

Ich möchte es kostenlos machen, also wähle KOSTENLOS

image.png

Cluster-Einstellungen. Sie müssen es nicht ändern.

image.png

Der Clusteraufbau wird gestartet.

image.png

Erstellen Sie nach dem Erstellen des Clusters zunächst einen Benutzer für den Datenbankzugriff. image.png

Wählen Sie die Kennwortauthentifizierung und geben Sie den Benutzernamen und das Kennwort ein, um einen Benutzer zu erstellen. Merken Sie sich diesen Benutzernamen und dieses Passwort, da Sie sie später verwenden werden.

image.png

Benutzer wurde erstellt

image.png

Richten Sie als Nächstes den Netzwerkzugriff ein. Sie können eine weiße Liste mithilfe von IP-Adressen definieren. Stellen Sie sie daher so ein, dass sie zum Üben eine beliebige IP-Adresse akzeptiert. (Da die Sicherheit für die Praxis nicht ausreichend ist, verwenden Sie sie bitte nicht mehr in der Produktion.)

image.png

Klicken Sie zur Bestätigung auf [ZUGRIFF VON ÜBERALL ERLAUBEN]

image.png

Machen wir eine DB Klicken Sie auf Cluster COLLECTIONS

image.png

Klicken Sie auf Meine eigenen Daten hinzufügen

image.png

Geben Sie "Jobs" für den Datenbanknamen und "Kandidat" für den zu erstellenden Sammlungsnamen ein

image.png

Nach dem Erstellen der Datenbank wird der Konsolenbildschirm angezeigt. Spätere Datenaktualisierungen werden hier wiedergegeben.

image.png

Dies ist das Ende des MongoDB-Setups.

Aufbau der Spring Boot-Umgebung

Gehen Sie zu Spring Initializr, stellen Sie die Vorlage wie im Bild gezeigt ein und laden Sie die Zip-Datei mit Generieren herunter.

image.png

Entpacken Sie die Zip-Datei und öffnen Sie sie in IntelliJ. Öffnen Sie zunächst application.properties und legen Sie die Zugriffsinformationen von MongoDB fest.


spring.data.mongodb.uri=mongodb+srv://user:<password>@cluster0.ayoho.mongodb.net/<dbname>?retryWrites=true&w=majority

Die Einstellungen für spring.data.mongodb.uri können über die MongoDB-Konsole abgerufen werden.

image.png

image.png

image.png

Verwenden Sie das Kennwort und den Datenbanknamen, die während der MongoDB-Einrichtung festgelegt wurden. (Wenn Sie die Prozedur befolgen, ist Datenbankname "Jobs")

Implementierung des Java-Programms

Jetzt schreiben wir Java. Ich kann die detaillierte Implementierung nicht erklären. Bitte versuchen Sie zu schreiben, während Sie unklare Punkte lösen. Sie können es überall platzieren, aber bitte lesen Sie die Paketinformationen oder GitHub.

Candidate.java


package com.example.mongoDBsample.entity;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection = "candidate")
public class Candidate {
    @Id
    private String id;

    private String name;

    private double exp;

    @Indexed(unique = true)
    private String email;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getExp() {
        return exp;
    }

    public void setExp(double exp) {
        this.exp = exp;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

CandidateRepository.java


package com.example.mongoDBsample.repository;

import com.example.mongoDBsample.entity.Candidate;
import org.springframework.data.mongodb.repository.MongoRepository;

import java.util.List;
import java.util.Optional;

public interface CandidateRepository extends MongoRepository<Candidate, String> {
    Optional<Candidate> findByEmail(String email);

    List<Candidate> findByExpGreaterThanEqual(double exp);

    List<Candidate> findByExpBetween(double from, double to);
}

CandidateController.java


package com.example.mongoDBsample.controller;

import com.example.mongoDBsample.exception.ResourceNotFoundException;
import com.example.mongoDBsample.entity.Candidate;
import com.example.mongoDBsample.repository.CandidateRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.List;

@RestController
@RequestMapping("/candidate")
public class CandidateController {

    @Autowired
    private CandidateRepository candidateRepository;

    @PostMapping
    @ResponseStatus(code = HttpStatus.CREATED)
    public Candidate add(@RequestBody Candidate candidate) {
        return candidateRepository.save(candidate);
    }

    @GetMapping
    public List<Candidate> getAll() {
        return candidateRepository.findAll();
    }

    @GetMapping(value = "/{id}")
    public Candidate getOne(@PathVariable String id) {
        return candidateRepository.findById(id)
                .orElseThrow(() -> new ResourceNotFoundException());
    }

    @PutMapping(value = "/{id}")
    public Candidate update(@PathVariable String id, @RequestBody Candidate updatedCandidate) {
        Candidate candidate = candidateRepository.findById(id)
                .orElseThrow(() -> new ResourceNotFoundException());
        candidate.setName(updatedCandidate.getName());
        candidate.setExp(updatedCandidate.getExp());
        candidate.setEmail(updatedCandidate.getEmail());
        return candidateRepository.save(candidate);
    }

    @DeleteMapping(value = "/{id}")
    @ResponseStatus(code = HttpStatus.ACCEPTED)
    public void delete(@PathVariable String id) {
        Candidate candidate = candidateRepository.findById(id)
                .orElseThrow(() -> new ResourceNotFoundException());
        candidateRepository.delete(candidate);
    }

    @GetMapping("/searchByEmail")
    public Candidate searchByEmail(@RequestParam(name = "email") String email) {
        return candidateRepository.findByEmail(email)
                .orElseThrow(() -> new ResourceNotFoundException());

    }

    @GetMapping("/searchByExp")
    public List<Candidate> searchByExp(@RequestParam(name = "expFrom") Double expFrom, @RequestParam(name = "expTo", required = false) Double expTo) {
        List<Candidate> result = new ArrayList<>();
        if (expTo != null) {
            result = candidateRepository.findByExpBetween(expFrom, expTo);
        } else {
            result = candidateRepository.findByExpGreaterThanEqual(expFrom);
        }
        return result;
    }
}

ResourceNotFoundException.java


package com.example.mongoDBsample.exception;

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;

@ResponseStatus(value = HttpStatus.NOT_FOUND)
public class ResourceNotFoundException extends RuntimeException {
    public ResourceNotFoundException() {
    }
}

Bestätigung der Umsetzung

Nachdem die Implementierung abgeschlossen ist, überprüfen wir, ob der Datenzugriff über die API möglich ist.

Starten Sie die App auf IntelliJ

image.png

image.png

Oder führen Sie zum Starten Folgendes in CUI aus

./gradlew bootRun

Benutzer registrieren

Lassen Sie uns zuerst den Benutzer registrieren. Wenn Sie eine POST-Anforderung an http: // localhost: 8080 / Candidate / senden und das folgende JSON-Objekt an den Body angehängt ist, Die registrierten Benutzerinformationen werden in der Antwort zurückgegeben.

{
    "name": "Axel",
    "exp": "10",
    "email": "[email protected]"
}

image.png

Wenn Sie sich die MongoDB-Konsole ansehen, können Sie sehen, dass die Daten hinzugefügt wurden.

image.png

Benutzer durchsuchen

Wenn Sie eine GET-Anfrage an http: // localhost: 8080 / Kandidat senden, werden alle registrierten Benutzer zurückgegeben.

image.png

Benutzerinformationen aktualisieren

In einer PUT-Anfrage an http: // localhost: 8080 / Kandidat / {Benutzer-ID} Wenn Sie das aktualisierte JSON-Objekt an den Body anhängen, werden die Registrierungsinformationen aktualisiert.

image.png

image.png

Benutzer löschen

Durch Auslösen einer DELETE-Anforderung an http: // localhost: 8080 / Kandidat / {Benutzer-ID} Sie können den Benutzer löschen.

image.png

image.png


das ist alles.

Ich denke, Sie haben MongoDB / SpringBoot erstellt, um die Grundlagen eines REST-API-Backends zu implementieren, mit dem Sie Ihren Datenspeicher verwenden können. Lassen Sie uns dies erweitern oder eine Anwendung in Zusammenarbeit mit dem Frontend erstellen!

Recommended Posts

Erstellen wir eine REST-API mit SpringBoot + MongoDB
Erstellen Sie mit GitHub Pages einen Pseudo-REST-API-Server
Erstellen Sie die CRUD-API mit der Fast API
So erstellen Sie eine Rest-API in Django
Erstellen Sie eine REST-API mit dem in Lobe und TensorFlow Serving erlernten Modell.
Erstellen wir eine Funktion für den parametrisierten Test mithilfe eines Rahmenobjekts
Erstellen Sie mithilfe der Twitter-Streaming-API einen Echtzeit-Bot für die automatische Antwort
Abrufen von Salesforce-Daten mithilfe der REST-API
Erstellen Sie mit tkinter eine Python-GUI
Erstellen Sie ein verschachteltes Wörterbuch mit defaultdict
Erstellen Sie eine API mit hug mit mod_wsgi
Erstellen Sie mit Boost.Python einen C-Sprach-Wrapper
Erstellen Sie ganz einfach einen TalkBot mit Discord.py und der Talk-API von A3RT (pya3rt).
[Python] Ich habe eine REST-API mit AWS API Gateway und Lambda geschrieben.
Versuchen Sie, einen Artikel von Qiita mit der REST-API [Umweltvorbereitung] zu erstellen.
Erstellen Sie eine REST-API, um dynamodb mit dem Django REST Framework zu betreiben
Erstellen wir eine virtuelle Umgebung für Python
Erstellen wir mit Python eine kostenlose Gruppe
Erstellen Sie mit dem Sympy-Modul ein Diagramm
[Python] Erstellen Sie eine Stapelumgebung mit AWS-CDK
Erstellen Sie eine Anwendung mit der Spotify-API
Lassen Sie uns mit flask-babel eine mehrsprachige Site erstellen
Erstellen Sie mit Pandas einen Datenrahmen aus Excel
FX-Datenerfassung mit der OANDA REST-API
Erstellen Sie eine GIF-Datei mit Pillow in Python
Erstellen Sie mit PyLearn2 eine App zur falschen Unterstützung
Erstellen Sie mit ClustalW2 einen phylogenetischen Baum aus Biopyton
Lassen Sie uns Emotionen mithilfe der Emotions-API in Python beurteilen
Erstellen Sie mit Kaitai Struct einen Binärdatenparser
Erstellen Sie eine Webmap mit Python und GDAL
Erstellen Sie ein Besuchermeldungssystem mit Raspberry Pi
Erstellen Sie eine MIDI-Datei in Python mit pretty_midi
Lassen Sie uns mit SWIG ein Modul für Python erstellen
Bereiten Sie einen Pseudo-API-Server mit GitHub-Aktionen vor
Erstellen Sie eine GUI auf dem Terminal mit Flüchen
Erstellen Sie mit Selenium einen Datenerfassungsbot in Python
Erstellen Sie eine Todo-App mit Django REST Framework + Angular
Erstellen Sie einen Farbsensor mit einem Raspeltorte und einer Kamera
FX-Datenerfassung mit der OANDA REST-API
Versuchen Sie, mit der Twitter-API v2 ein soziales Diagramm zu zeichnen
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 1 ~
[LINE Messaging API] Erstellen Sie mit Python ein umfangreiches Menü
[Python] Generieren Sie ValueObject mit dem vollständigen Konstruktor mithilfe von Datenklassen
Lassen Sie uns ein RDF mithilfe der Papierinformationen von PubMed erstellen.
Lassen Sie uns eine Todo-App mit dem Django REST-Framework erstellen
Holen Sie sich LEAD-Daten mit der REST-API von Marketo in Python
Registrieren Sie Tickets mit der Redmine-API mithilfe von Python-Anforderungen
Ich habe APN (Remote-Benachrichtigung) mithilfe der Parse.com-REST-API ausprobiert
Erstellen Sie eine Tweet-Heatmap mit der Google Maps-API
Lernen eines neuronalen Netzes mit Chainer - Erstellen eines Web-API-Servers
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 2 ~
Erstellen eines seq2seq-Modells unter Verwendung der funktionalen API-Inferenz von keras
Lassen Sie uns mit Google Colaboratory ganz einfach ein mathematisches GIF erstellen
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 3 ~
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 4 ~
[CRUD] [Django] Erstellen Sie eine CRUD-Site mit dem Python-Framework Django ~ 5 ~
Durchsuchen Sie die Tabelle mit sqlalchemy und erstellen Sie ein Wörterbuch
Erstellen Sie mit Docker eine einfache Fast API-Entwicklungsumgebung