【问题标题】:How to pass http headers to GET request in Spring RestTemplate [duplicate]如何在Spring RestTemplate中将http标头传递给GET请求[重复]
【发布时间】:2019-03-12 07:48:26
【问题描述】:

我正在使用 Spring RestTemplate 编写客户端 REST GET 调用。我需要将 http 标头传递给 GET 调用。

请找代码sn-p:

String url = "http://<hostname>:7001/api?id=231";
ResponseEntity<ResponseObject> getEntity = this.restTemplate.getForEntity(url, ResponseObject.class);
return getEntity .getBody();

org.springframework.http.HttpHeaders headers = new org.springframework.http.HttpHeaders();
headers.set("Accept", "application/xml");
headers.set("username", "ABC");

我需要在这个 REST get 调用中传递上面的标头,例如 Accept 和 username。 需要对相同的代码进行哪些更改,以便我可以在 RestTemplate 中传递标头。

【问题讨论】:

    标签: java spring rest resttemplate


    【解决方案1】:

    将您的代码用作:

    org.springframework.http.HttpHeaders headers = new 
    org.springframework.http.HttpHeaders();
    headers.set("Accept", "application/xml");
    headers.set("username", "ABC");
    
    String url = "http://<hostname>:7001/api?id=231";
    ResponseEntity<ResponseObject> getEntity = 
    this.restTemplate.exchange(url,HttpMethod.GET,new HttpEntity<>( headers),ResponseObject.class);
    return getEntity .getBody();
    

    【讨论】:

    • getForEntity(字符串、httpHeaders、对象)没有变体。他们有一个通过地图。我正在尝试测试 getForEntity(String, ResponseObject.class, headers)
    • 让我编辑解决方案,请检查。
    【解决方案2】:

    getForEntity 不支持设置标题。请改用exchange

    HttpHeaders headers = new HttpHeaders();
    headers.set("Accept", "application/xml");
    headers.set("username", "ABC");
    
    HttpEntity entity = new HttpEntity(headers);
    
    ResponseEntity<ResponseObject> response = restTemplate.exchange(
        url, HttpMethod.GET, entity,ResponseObject.class);
    

    【讨论】:

    • 这也有效。
    【解决方案3】:

    通用的rest模板执行器方法:

    public <T, E extends TIBCOResponse> E executeRequest(HttpMethod method, 
            HttpHeaders httpHeaders, 
            String url,
            T requestBody,
            Map<String, String> paramters, 
            Class<E> clazz) {
    
        HttpEntity<T> entity = new HttpEntity<>(requestBody, httpHeaders);
    
        RestTemplate restTemplate = new RestTemplate();
    
        ResponseEntity<E> response = restTemplate.exchange(url, method, entity, clazz, paramters);
    
        return response.getBody();
    }
    

    服务方法实现:

    public ResponseObject FuncCallerInsideRest(IntegrationDTO integrationDTO) {
    
        String OPERATION_URL = "/FindAccountInfo?accountNumber="+integrationDTO.getAccountNumber();
        Map<String, String> parameters = new HashMap<>();
        httpHeaders = new HttpHeaders();
    
        httpHeaders.set("RetryLimit", "2");
        httpHeaders.set("Authorization", "abcd");
        httpHeaders.set("SessionID", integrationDTO.getSessionID());
    
        ResponseObject ResponseObject = this.executeRequest(HttpMethod.GET, httpHeaders,
                BASE_URL.concat(PATH_URL.concat(OPERATION_URL)), null, parameters,
                ResponseObject.class);
    
        return ResponseObject;
    }
    

    【讨论】:

      猜你喜欢
      • 2019-10-25
      • 1970-01-01
      • 2015-12-07
      • 2012-11-17
      • 1970-01-01
      • 2015-12-13
      • 2012-05-08
      • 1970-01-01
      相关资源
      最近更新 更多