What is the restTemplate.exchange() method for?

前端 未结 4 1205
日久生厌
日久生厌 2021-02-02 07:37

Actually what does the restTemplate.exchange() method do?

@RequestMapping(value = \"/getphoto\", method = R         


        
相关标签:
4条回答
  • 2021-02-02 08:14

    The method documentation is pretty straightforward:

    Execute the HTTP method to the given URI template, writing the given request entity to the request, and returns the response as ResponseEntity.

    URI Template variables are expanded using the given URI variables, if any.


    Consider the following code extracted from your own question:

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

    We have the following:

    • A GET request will be performed to the given URL sending the HTTP headers that are wrapped in the HttpEntity instance.
    • The given URL contains a template variable ({id}). It will be replaced with the value given in the last method parameter (id).
    • The response entity will be returned​ as a byte[] wrapped into a ResponseEntity instance.
    0 讨论(0)
  • 2021-02-02 08:17

    The more generic exchange API requires a HttpMethod parameter and a request object for completeness. Compare:

    ResponseEntity<Foo> response = 
    restTemplate.exchange(url, HttpMethod.GET, request, Foo.class);
    
    ResponseEntity<Foo> response = 
    restTemplate.getForEntity(url, Foo.class);
    
    0 讨论(0)
  • 2021-02-02 08:23

    TL;DR: Q: What is a request-response pair called? A: An "exchange".


    The term exchange is used, almost incidentally, in the official technical documentation of HTTP to refer to an HTTP request combined with the corresponding response.

    However looking at the answers to the following questions, it is clear that while this may have represented a de facto standard for some people, many other were not aware of it, or hadn't adopted it.

    • What is a request-response pair called?
    • Name for HTTP Request+Response

    The documentation doesn't bother to mention the etymology of the name -- probably assuming that it's obvious.

    Notice, however, that there are many different RestTemplate HTTP request methods listed and only a small fraction of them are named exchange. The list is primarily made up of HTTP method-specific names such as delete, put, getForEntity, postForObject, et cetera. Technically speaking, all of these methods perform exchanges in the same sense, but the more focused convenience methods are limited to a specific subset of the possible exchange functionality and parameter+return types.

    To put it simply, the set of exchange functions are the most general/capable methods provided by RestTemplate, so you can use exchange when none of the other methods provides a complete enough parameter set to meet your needs.

    For example:

    • Sending GET request with Authentication headers using restTemplate, in which the OP has noticed that "...the only way to send Headers such as accept and Authorization is by using the exchange method..."
    0 讨论(0)
  • 2021-02-02 08:33

    The exchange method executes the HTTP method against the specified URI template, passing in the parameters for replacement. In this case it gets an image for a person entity for its Id parameter and returns the byte array for it.

    0 讨论(0)
提交回复
热议问题