2016-03-25 4 views
4

Die Situation RückkehrWie füge ich Typen in Jersey WADL während auch Reaktions

Ich habe ein Jersey 2,18 API-Endpunkt, der ein User Objekt zurückgibt. Meine Stakeholder benötigen die API, um eine WADL-Datei zu generieren, die nicht nur den API-Pfad, sondern auch den zurückgegebenen Objekttyp widerspiegelt.

Dieser von Jersey aus der Box ab 2015 abgedeckt wird, indem Sie die folgende Endpunktdefinition:

@GET 
@Path("/") 
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 
public User getExampleUser() { 
    User exampleUser = new User(); 
    return exampleUser; 
} 

Die resultierende von Jersey erzeugt WADL Datei korrekt den Endpunkt enthält, sowie den Rückgabetyp:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<application xmlns="http://wadl.dev.java.net/2009/02"> 
    <doc xmlns:jersey="http://jersey.java.net/" jersey:generatedBy="Jersey: 2.18 2015-06-05 02:28:21"/> 
    <doc xmlns:jersey="http://jersey.java.net/" jersey:hint="This is simplified WADL with user and core resources only. To get full WADL with extended resources use the query parameter detail. Link: http://localhost:8080/example/api/v3/application.wadl?detail=true"/> 
    <grammars> 
     <include href="application.wadl/xsd0.xsd"> 
      <doc title="Generated" xml:lang="en"/> 
     </include> 
    </grammars> 
    <resources base="http://localhost:8080/example/api/v3/"> 
     <resource path="/"> 
      <method id="getExampleUser" name="GET"> 
       <request> 
       </request> 
       <response> 
        <ns2:representation xmlns:ns2="http://wadl.dev.java.net/2009/02" xmlns="" element="user" mediaType="application/json"/> 
        <ns2:representation xmlns:ns2="http://wadl.dev.java.net/2009/02" xmlns="" element="user" mediaType="application/xml"/> 
       </response> 
      </method> 
     </resource>  
    </resources> 
</application> 

Aber die meisten der Gemeinde Jersey scheint Endpunkte zu haben ein allgemeineres Response Objekt zurück, das für alle Arten von schönen Dingen bis einschließlich E-TAG caching, HTTP-Statuscode Manipulation erlaubt, error messaging und mehr.

Zum Beispiel:

@GET 
@Path("/") 
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 
public Response getExampleUser() { 
    User exampleUser = new User(); 
    return Response.ok(exampleUser).build(); 
} 

Die WADL erzeugt sieht gleich aus, aber der Antwortabschnitt zeigt jetzt keine Beweise für den Rückgabetyp und Schema.

<response> 
    <representation mediaType="application/json"/> 
    <representation mediaType="application/xml"/> 
</response> 

Meine Frage

Ist es möglich, aus den reichen automatisch generierte WADL Dateien profitieren und gleichzeitig auch in der Lage zu sein meine Endpunkte die flexiblere Response Objekt zurück zu haben?

Wie kann ich alternativ Umleitung, Zwischenspeicherung und andere grundlegende API-Funktionen handhaben, während der spezifische Objekttyp immer noch von meiner Endpunktdefinition zurückgegeben wird?

+0

yo slifty - haben Sie selbst eine Antwort gefunden? Ich habe nach dem gleichen gesucht. Vielen Dank! –

Antwort

1

hatte ich genau das gleiche Problem und konnte es so lösen:

  • Alle meine Einheiten mit @XmlRootElement kommentiert werden musste und in, um einen Dummy-Rest Endpunkt gesendet für sie zeigen in application.wadl/xsd0.xsd.
  • Ich habe Swagger in mein Projekt aufgenommen und es zum Generieren von Dokumentation verwendet, die die Antwortcodes und Antwortobjekte enthält.
  • Ich lief dann das vorhandene Wadl Generation Tool, application.wadl.
  • Der letzte Schritt bestand darin, eine Methode zu schreiben, die die Antwortcodes und Objekte aus der Swagger-Datei in die wadl-Datei einfügt.

Die drei letzten Schritte wurden in einem Restdienst zusammengestellt. Das Ergebnis ist, dass das WADL automatisch durch den Aufruf des Restdienstes generiert wird und Sie weiterhin Response wie zuvor verwenden können.

Verwandte Themen