La ce folosește metoda restTemplate.exchange()? (Programare, Rest, Resttemplate)

sneha a intrebat.

De fapt, la ce folosește metoda restTemplate.exchange() face?

@RequestMapping(value = "/getphoto", method = RequestMethod.GET)
public void getPhoto(@RequestParam("id") Long id, HttpServletResponse response) {

    logger.debug("Retrieve photo with id: " + id);

    // Prepare acceptable media type
    List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
    acceptableMediaTypes.add(MediaType.IMAGE_JPEG);

    // Prepare header
    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(acceptableMediaTypes);
    HttpEntity<String> entity = new HttpEntity<String>(headers);

    // Send the request as GET
    ResponseEntity<byte[]> result = 
        restTemplate.exchange("http://localhost:7070/spring-rest-provider/krams/person/{id}", 
                              HttpMethod.GET, entity, byte[].class, id);

    // Display the image
    Writer.write(response, result.getBody());
}

4 răspunsuri
cassiomolin

documentația metodei este destul de simplă:

Execută metoda HTTP la șablonul URI dat, scriind entitatea de cerere dată la cerere și returnează răspunsul ca fiind ResponseEntity.

Variabilele șablonului URI sunt extinse folosind variabilele URI date, dacă există.


Luați în considerare următorul cod extras din propria întrebare:

ResponseEntity<byte[]> result = 
    restTemplate.exchange("http://localhost:7070/spring-rest-provider/krams/person/{id}", 
                          HttpMethod.GET, entity, byte[].class, id);

Avem următoarele:

  • A GET se va efectua o cerere către URL-ul dat, trimițând antetele HTTP care sunt incluse în HttpEntity instanță.
  • URL-ul dat conține o variabilă șablon ({id}). Aceasta va fi înlocuită cu valoarea indicată în ultimul parametru al metodei (id).
  • Entitatea de răspuns va fi returnată sub forma unei entități byte[] înfășurată într-un ResponseEntity instanță.

Comentarii

  • Această metodă este sincronă sau asincronă? Pe baza descrierii, este sincronă. Mă întrebam cum se gestionează cererile care returnează un Future de la un server. –  > Por animageofmine.
  • RestTemplate este sincronă. A se vedea documentația. –  > Por cassiomolin.
  • Explicația ta a fost destul de utilă. Dar OP are dreptate, textul original este în esență un raționament circular. Este de înțeles doar de către persoanele care îl înțeleg deja. Am ajuns aici pentru că încerc să port un script care folosește exchange(), iar documentația respectivă este fără speranță. –  > Por Jason.
Brent Bradburn

TL;DR: Q: Cum se numește o pereche cerere-răspuns? A: Un „schimb„.


Termenul schimb este utilizat, aproape întâmplător, în documentația tehnică oficială a HTTP pentru a se referi la o cerere HTTP combinată cu răspunsul corespunzător.

Cu toate acestea, dacă ne uităm la răspunsurile la următoarele întrebări, este clar că, în timp ce acest lucru a reprezentat un standard de facto pentru unele persoane, multe altele nu erau la curent cu el sau nu îl adoptaseră.

  • Cum se numește o pereche cerere-răspuns?
  • Denumirea pentru cerere+răspuns HTTP

documentația nu se obosește să menționeze etimologia denumirii – presupunând probabil că este evidentă.

Observați, totuși, că există multe metode de solicitare HTTP RestTemplate diferite enumerate și doar o mică parte dintre ele poartă numele de exchange. Lista este alcătuită în principal din Metoda HTTP-specifice, cum ar fi delete, put, getForEntity, postForObject, etc. Din punct de vedere tehnic, toate aceste metode efectuează schimburi în același sens, dar metodele de conveniență mai concentrate sunt limitate la un subset specific de funcționalități de schimb și tipuri de parametri+returni posibile.

Ca să simplificăm, setul de exchange sunt cele mai generale/capabile metode furnizate de către RestTemplate, astfel încât puteți utiliza exchange atunci când niciuna dintre celelalte metode nu oferă un set de parametri suficient de complet pentru a vă satisface nevoile.

De exemplu:

  • Trimiterea unei cereri GET cu anteturi de autentificare utilizând restTemplate, în care OP a observat că „…singura modalitate de a trimite antete precum Accept și Authorization este prin utilizarea metodei Exchange…”

Gapmeister66

API-ul de schimb mai generic necesită un parametru HttpMethod și un obiect de cerere pentru complezență. Comparați:

ResponseEntity<Foo> response = 
restTemplate.exchange(url, HttpMethod.GET, request, Foo.class);

ResponseEntity<Foo> response = 
restTemplate.getForEntity(url, Foo.class);

Matt T.

Metoda de schimb execută metoda HTTP în raport cu șablonul URI specificat, trecând parametrii pentru înlocuire. În acest caz, ea obține o imagine pentru o entitate persoană pentru parametrul Id și returnează matricea de octeți pentru aceasta.