Dropwizard ist ein Open-Source-Java-Framework für die schnelle Entwicklung von REST-APIs. Dropwizard ist eine Art Ökosystem, das alle Abhängigkeiten (wie Jersey, Jackson oder Jetty) in einem einzigen Paket enthält oder als separates Modul hinzugefügt werden kann. Wenn Sie Dropwizard nicht verwenden, sammeln Sie am Ende alle Abhängigkeiten selbst und es kommt häufig zu Problemen beim Laden von Klassen, da die Versionen zwischen verschiedenen Java-Bibliotheken nicht übereinstimmen. Dropwizard löst dieses Problem für Sie und vereint stabile, ausgereifte Bibliotheken in einem einfachen, leichten Paket, mit dem Sie sich darauf konzentrieren können, Dinge zu erledigen. Lernen Sie Schritt für Schritt, wie Sie mit Dropwizard REST–APIs erstellen.
Table of ContentsLibraries included inside dropwizardSetup dropwizard with mavenCreate REST Application ClassCreate REST Resource and APIsBuild Resource RepresentationsRequest ValidationVerify REST APIs
- In Dropwizard enthaltene Bibliotheken
- Dropwizard mit maven einrichten
- REST-Anwendungsklasse erstellen
- REST-Ressource und APIs erstellen
- Ressourcendarstellungen erstellen
- Anforderungsvalidierung
- REST-APIs überprüfen
- Anwendung in JAR-Datei erstellen
- Anwendung im Jetty-Server starten
- Auf URI zugreifen http://localhost:8080/employees
- Zugriffs-URI http://localhost:8080/employees/1
- Gesendet HTTP PUT http://localhost:8080/employees /1 mit ungültigen Anforderungsdaten
- Gesendetes HTTP PUT http://localhost:8080/employees /1 mit korrekten Daten
In Dropwizard enthaltene Bibliotheken
Sobald Sie Dropwizard in Ihr Projekt aufgenommen haben, werden Ihrem Klassenpfad folgende Bibliotheken hinzugefügt.
- Jersey – Zum Erstellen von RESTful-Webanwendungen.
- Jetty – Dropwizard verwendet die Jetty HTTP-Bibliothek, um einen HTTP-Server direkt in Ihr Projekt einzubetten.
- Jackson – Für Objekt zu / von JSON-Konvertierung. Es ermöglicht Ihnen, Ihre Domänenmodelle direkt mit JAXB-Annotationen zu exportieren.
- Guava – hochoptimierte unveränderliche Datenstrukturen zur Beschleunigung der Entwicklung.
- Logback und SLF4j – für performantes und flexibles Logging.
- Hibernate Validator – ein einfaches deklaratives Framework zur Validierung von Benutzereingaben und zum Generieren hilfreicher und i18n-freundlicher Fehlermeldungen.
- Apache HttpClient – Für die Interaktion auf niedriger und hoher Ebene mit anderen Webdiensten.
- JDBI – der einfachste Weg, eine relationale Datenbank mit Java zu verwenden.
- Liquidbase – um Ihr Datenbankschema während Ihres gesamten Entwicklungs- und Release-Zyklus in Schach zu halten.
- FreeMarker – Template-Systeme.
- Schnurrbart – einfache Vorlagensysteme für benutzerorientierte Anwendungen.
- Joda Time – sehr vollständige und vernünftige Bibliothek für den Umgang mit Datums- und Uhrzeitangaben.
Dropwizard mit maven einrichten
Unser Projekt basiert auf dem Archetyp maven-archetype-quickstart. Sie können das Projekt entweder über die Eingabeaufforderung erstellen oder Eclipse verwenden, um ein einfaches Maven-Java-Projekt zu erstellen.
mvn archetype:generate -DgroupId=com.howtodoinjava.demo -DartifactId=DropWizardExample -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Generiertes Projekt wird auch pom.xml
Datei haben. Fügen Sie dort die Dropwizard-Abhängigkeit hinzu.
Dadurch werden alle JAR-Dateien heruntergeladen und Ihrem Klassenpfad hinzugefügt. Um unserem Projekt Build- und Paketunterstützung hinzuzufügen, verwenden wir das Maven-Shade-Plugin, mit dem wir unser Projekt zusammen mit seinen Abhängigkeiten vollständig in eine einzelne eigenständige JAR-Datei (Fat / Uber JAR) packen können verteilt und ausgeführt wie es ist.
Komplettes pom.XML-Datei so aussehen.
REST-Anwendungsklasse erstellen
Die Anwendungsklasse ist der Einstiegspunkt für jede Dropwizard-Anwendung. Es muss die Klasse io.dropwizard.Application
erweitern und die Methoden initialize(Bootstrap<Configuration>)
und run(Configuration, Environment)
implementieren. Sie bereiten die Laufzeitumgebung der Anwendung vor.
Um die run-Methode aufzurufen, benötigen Sie die public static void main(String args) {}
-Methode, die vom Befehl java -jar
aufgerufen wird, wenn Sie die Anwendung als JAR-Datei ausführen.
Um die JAR-Datei auszuführen, fügen wir dem Befehl, der den eingebetteten HTTP-Server (Jetty) startet, das Argument server hinzu, um unseren Dienst auszuführen.
java -jar target\DropWizardExample.jar server
Dropwizards eingebetteter Jetty-Server versucht standardmäßig, an die Ports 8080 und 8081 zu binden. Port 8080 wird vom Server verwendet, um eingehende HTTP-Anforderungen an die Anwendung zu senden, während 8081 von der Dropwizard-Verwaltungsschnittstelle verwendet wird.
Wir haben auch die notwendigen Klassen Logger
und LoggerFactory
importiert, um eine Logger-Instanz zu erstellen, die wir für unsere Logging-Anforderungen verwenden könnten.
REST-Ressource und APIs erstellen
Wenn Sie nun die Bootstrap-Klasse der Anwendung hinzugefügt haben, können Sie jetzt REST-Ressourcen hinzufügen, die REST-APIs enthalten. In diesem Beispiel habe ich eine Mitarbeiterverwaltungsanwendung erstellt – sie verfügt also über APIs zum Erstellen / Aktualisieren / Löschen von Mitarbeiterdatensätzen. Diese Klasse ist für die Verarbeitung von HTTP-Anforderungen und die Generierung von JSON-Antworten verantwortlich.
Wie wir Jersey in unserem Klassenpfad haben, werden wir es verwenden, um REST-APIs zu erstellen.
Um die Datenbank zu imitieren, habe ich die Klasse EmployeeDB
erstellt, in der Mitarbeiterdatensätze und Aktualisierungen im Speicher gespeichert werden.
Ressourcendarstellungen erstellen
Die Darstellung enthält die Daten und wird in JSON serialisiert. Es ist ein Modell für die RESTful-Anwendung. Wenn Sie Jersey mit Jackson verwenden, benötigen Sie zum Erstellen einer Ressourcendarstellung lediglich ein einfaches POJO nach Java Bean–Standards. Jackson konstruiert die JSON-Zeichenfolge rekursiv gemäß den Getter-Methoden jeder Klasse und ihrem Rückgabetyp.
java.util.List
wird in ein JSON-Array konvertiert.In einigen Fällen können Sie verhindern, dass eine Eigenschaft Teil der JSON-Darstellung ist, indem Sie die Annotation @JsonIgnore
zu ihrem Getter hinzufügen.
Anforderungsvalidierung
Wenn Sie PUT
– und POST
-Anforderungen akzeptieren, müssen Sie den vom Benutzer übermittelten Entitätsinhalt im Anforderungstext validieren. Dropwizard verwendet Hibernate Validator für diesen Zweck. Das Hinzufügen der Validierung erfordert die folgenden Schritte.
REST-APIs überprüfen
Wenn wir nun Validierungen für REST-APIs erstellt und hinzugefügt haben, testen wir dies.
Anwendung in JAR-Datei erstellen
> mvn clean package
Anwendung im Jetty-Server starten
> java -jar target\DropWizardExample-0.0.1-SNAPSHOT.jar server
Auf URI zugreifen http://localhost:8080/employees
Dies gibt die Mitarbeitersammlung und die zugehörigen Antwortheader zurück.
Zugriffs-URI http://localhost:8080/employees/1
Dies gibt den Datensatz des Mitarbeiters mit der ID 1 zurück.
Gesendet HTTP PUT http://localhost:8080/employees /1 mit ungültigen Anforderungsdaten
Sie erhalten Validierungsnachrichten.
Gesendetes HTTP PUT http://localhost:8080/employees /1 mit korrekten Daten
Mitarbeiterdatensatz wird erfolgreich aktualisiert.
Auf die gleiche Weise können Sie andere APIs und Szenarien testen.