![[18.0.0.1 und höher]](../ng_v18001plus.gif)
MicroProfile-REST-Client konfigurieren
Rufen Sie das Feature für den MicroProfile-Rest-Client über mpRestClient-1.0 auf.
Vorbereitende Schritte
Informationen zu diesem Vorgang
Der MicroProfile-Rest-Client wird mit den JAX-RS-2.0-Client-APIs erstellt, um eine typsichere Lösung zum Aufrufen von REST-konformen Services über HTTP bereitzustellen. Sie können Clientanwendungen mit Code schreiben, der sich mehr auf das Model konzentriert. Führen Sie die folgenden Schritte aus, um Ihre eigenen REST-Clients zu erstellen.
Vorgehensweise
- Erstellen Sie eine Schnittstelle, die den fernen Service darstellt. Sorgen Sie dafür, dass die Methoden der Schnittstelle mit den REST-konformen APIs des Endpunkts übereinstimmen. Das folgende Beispiel zeigt eine Beispielschnittstelle, auf die ein Service für Onlinemusik zugreift.
@Path("/playlist") @Consumes("application/json") public interface MusicPlaylistService { @GET List<String> getPlaylistNames(); @GET @Path("/{playlistName}") List<Song> getPlaylist(@PathParam("playlistName") name) throws UnknownPlaylistException; @POST @Path("/{playlistName}") long newPlayList(@PathParam("playlistName") name, List<Song> playlist) throws PlaylistAlreadyExistsException; @PUT @Path("/{playlistName}") long updatePlayList(@PathParam("playlistName") name, List<Song> playlist) throws UnknownPlaylistException; }
Ebenso wie JAX-RS auf der Serverseite verwendet die Beispielschnittstelle Annotationen, wie z. B. @Path, @Consumes, @GET und @PathParam.
- Rufen Sie die Methoden auf, die in der Schnittstelle definiert sind. Die Beispielschnittstelle definiert Methoden, die Sie aufrufen können.
- Rufen Sie die Methode getPlaylistNames auf, um die verfügbaren Namen der Wiedergabelisten abzurufen. Die REST-Clientimplementierung sendet eine GET-Anforderung an den Enpunkt, der sich an der Position <baseUrl>/playlist befindet. Diese Position akzeptiert den Medientyp application/json mit einer Zeichenfolgeliste, in der die verfügbaren Namen der Wiedergabelisten angegeben sind.
- Rufen Sie die Methode getPlaylist auf, um anzuzeigen, welche Songs in einer Wiedergabeliste enthalten sind. Diese Methode löst einen Fehler des Typs UnknownPlaylistException aus, der möglicherweise auch im fernen Service angegeben wird und der zur Zurückgabe einer Antwort des Typs HTTP 404 führt.
- Verwenden Sie einen ResponseExceptionMapper-Befehl, um Ausnahmen zu verarbeiten. Das folgende Beispiel konvertiert die Antwort des Typs HTTP 404 in eine bestimmte Ausnahmebedingung.
Im Beispiel sind die beiden Fälle UnknownPlaylistException und PlaylistAlreadyExistsException Unterklassen des Falls BasePlaylistException. Die Antwort toThrowable gibt eine Instanz der Ausnahme zurück anstatt sie auszulösen.@Provider public class PlaylistResponseExceptionMapper implements ResponseExceptionMapper<BasePlaylistException> { @Override public boolean handles(int statusCode, MultivaluedMap<String, Object> headers) { return statusCode == 404 // Nicht gefunden || statusCode == 409; // Konflikt } @Override public BasePlaylistException toThrowable(Response response) { switch(response.getStatus()) { case 404: return new UnknownPlaylistException(); case 409: return new PlaylistAlreadyExistsException(); } return null; } }
- Erstellen Sie die Implementierung und starten Sie sie, nachdem Sie die Schnittstelle und den Mapper für Ausnahmeantworten geschrieben haben. Sie können die Implementierung entweder mit der RestClientBuilder-API oder mit CDI (Contexts and Dependency Injection) und MP Config erstellen.
- Optional: Verwenden Sie die API RestClientBuilder, die zwar ausführlicher, aber in Umgebungen, in denen CDI nicht verfügbar ist, wie z. B. in Testumgebungen, hilfreich ist.
- Erstellen Sie eine Instanz der RestClientBuilder-API.
- Geben Sie die baseURL-URL des fernen Endpunkts an, der erforderlich ist, bevor Sie den Client erstellen.
- Registrieren Sie den Mapper für Antwortausnahmen. Verwenden Sie zum Registrieren anderer Providerklassen, wie z. B. MessageBodyReaders, MessageBodyWriters, filters und interceptors die Methode register.
- Erstellen Sie den Client und übergeben Sie ihn in der Schnittstellenklasse.
- Rufen Sie Methoden für den Client wie bei anderen Java™-Objekten auch auf.
... URL apiUrl = new URL("http://localhost:9080/onlineMusicService"); MusicPlaylistService playlistSvc = RestClientBuilder.newBuilder() .baseUrl(apiUrl) .register(PlaylistResponseExceptionMapper.class) .build(MusicPlaylistService.class); List<String> playlistNames = playlistSvc.getPlaylistNames(); for (String name : playlistNames) { List<Song> songs = playlistSvc.getPlaylist(name); if (hasSongBy(songs, "band name")) { coolPlaylists.add(name); } } ...
- Optional: Verwenden Sie CDI und MP Config zum Instanziieren des Clients.
- Installieren Sie das Feature mpRestClient-1.0 in der Liberty-Datei server.xml.
- Fügen Sie entweder das Feature cdi-1.2 oder das Feature cdi-2.0 hinzu.
- Fügen Sie entweder das Feature mpConfig-1.1 oder das Feature mpConfig-1.2 hinzu.
- Aktualisieren Sie die MusicPlaylistService-Schnittstelle mit den folgenden Annotationen:
Die Annotation @Dependent oder eine andere Bereichsannotation, wie z. B. @ApplicationScoped oder @RequestScoped, ist erforderlich, damit CDI die REST-Client-Schnittstelle erkennt und verwaltet. Die @RegisterRestClient-Annotation weist die Implementierung des MicroProfile-Rest-Client an, die Schnittstelle dynamisch zu implementieren. Doe Annotation @RegisterProvider weist den Implementierungscode des MicroProfile-Rest-Client an, die angegebene Providerklasse zu registrieren. Sie können die Annotation @RegisterProvider in derselben Schnittstelle für beliebig viele Provider wiederholen.@Path("/playlist") @Consumes("application/json") @Dependent@RegisterRestClient @RegisterProvider(PlaylistResponseExceptionMapper.class) public interface MusicPlaylistService { ...
- Fügen Sie den Client in ein weiteres verwaltetes Objekt ein. Kombinieren Sie die Annotation @Inject mit dem Decorator @RestClient, um CDI anzuweisen, eine Instanz der Schnittstelle MusicPlaylistService einzufügen:
@WebServlet(urlPatterns = "/PlaylistServlet") public class PlaylistServlet extends HttpServlet { @Inject @RestClient private MusicPlaylistService playlistService; @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List<String> names = playlistService.getPlaylistNames(); ...
- Verwenden Sie MP Config, um die baseUrl-URL des fernen Endpunkts in der MP-REST-Client-Implementierung anzugeben. Geben Sie die Konfigurationseigenschaft <fullyQualifiedInterfaceName>/mp-rest/url mit MicroProfile Config an. Eine Möglichkeit besteht darin, eine Systemeigenschaft in der Datei jvm.options zu definieren:
-Dcom.mypkg.MusicPlaylistService/mp-rest/url=http://localhost:9080/onlineMusicService
CDI-Injektion ist einfacher, wenn Sie den Client booten möchten. Mit MP Config können Sie unterschiedliche URLs für unterschiedliche Umgebungen, wie z. B. eine URL für die Testumgebung und eine URL für die Produktionsumgebung, verwenden, ohne dass Sie Code ändern müssen.

Dateiname: twlp_mp_restclient.html