2016-08-02 7 views
3

Ich vor kurzem ging durch erholsamen Web-Service-Tutorial, konnte aber nicht verstehen, was ein Kontext ist. Kann jemand erklären, was es und was auch @Contex t tut?REST-APIs verstehen - Was sind Kontext und @Context?

+0

Können Sie es klären? Sprechen Sie über einen bestimmten Rahmen? –

+0

@ CássioMazzochiMolin yeah, jersey – user3248186

+0

Und was meinst du mit * Kontext *? Welches Tutorial hast du gelesen? –

Antwort

0

Für eine Erklärung über Kontext in Programmierung, sehen Sie sich diese answer.

Die JAX-RS API bietet eine @Context Annotation. Im Allgemeinen kann eine solche Annotation verwendet werden, um kontextbezogene Java-Typen zu erhalten, die sich auf die Anforderung oder die Antwort beziehen. Diese Typen können in Klassen eingefügt werden, die von der JAX-RS-Laufzeit verwaltet werden.

Zum Beispiel die HttpServletRequest in Ihrem Ressource-Methode zu injizieren, können Sie wie folgt vorgehen:

@GET 
public Resonse foo(@Context HttpServletRequest request) { 
    ... 
} 

Zusätzliche Ressourcen:

+0

Können wir nicht direkt etwas wie HttpServelet req schreiben, anstatt @Context davor zu setzen, und was ist ein Kontext? – user3248186

+0

@ user3248186 Siehe meine aktualisierte Antwort. Die @ @ Context-Annotation wird benötigt, um Typen wie "HttpServletRequest" in Klassen einzufügen, die von JAX-RS verwaltet werden. –

+0

@ user3248186 Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen. –

2

JAX -RS bietet die @Context Anmerkung zu injizieren 12 Objektinstanzen auf den Kontext der Anfrage HTTP verwandt und sie sind:

  • Security - Sicherheitskontext Instanz für die aktuelle HTTP-Anforderung
  • anfordern - Für Voraussetzung Anforderungsverarbeitung Einstellung
  • Anwendung, Konfiguration und Provider -> Zugriff auf die Anwendung JAX-RS Stellen, Konfigurati auf und Anbieter Instanzen
  • ResourceContext - Ressourcen contect aClass Instanzen
  • ServletConfig - Die ServletConfig Instanz Instanz
  • ServletContext - Die ServletContext Instanz
  • HttpServletRequest - Die HttpServletRequest Instanz für die aktuelle Anfrage
  • HttpServletResponse - Die HttpServletResponse Instanz für die aktuelle Anforderung
  • httpheaders - Behält die HTTP-Header-Schlüssel und Werte
  • UriInfo - Abfrageparameter und Pfadvariablen aus dem URI genannt

Es ist ein wenig verwirrend, beides haben eine @Inject (oder @Autowired im Frühjahr) und @Context, die die gleiche Arbeit macht, aber es wird gehofft, mehr Ausrichtung auf Java EE in der nächsten Ausgabe zu bringen. In der Zwischenzeit müssen Sie sich abfinden.

Ein interessantes Feature ist, dass alle diese Instanzen als Feldwert oder direkt in die Ressourcenmethode injiziert werden können.

Ein Beispiel für die Injektion in die Ressource-Methode Parameterliste:

@Path("/") 
public class EndpointResource { 

    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    public Response getAllHttpHeaders(final @Context HttpHeaders httpHeaders){ 
     // Code here that uses httpHeaders 
    } 
} 

Ein Beispiel für die Injektion in ein Feld:

@Path("/") 
public class EndpointResource { 

    private final @Context HttpHeaders httpHeaders; 

    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    public Response getAllHttpHeaders(){ 
     // Code here that uses httpHeaders 
    } 
} 

Wenn Sie mehr wissen wollen, in dieser Serie einen Blick von Artikeln, die die Frage beantworten What is @Conext in JAX-RS used for?