当前位置: 首页 > 知识库问答 >
问题:

如何传递超文本传输协议报头到GET请求在Spring RestTem板[重复]

丁豪
2023-03-14

我写客户端REST GET调用使用Spring RestTem板。我需要将超文本传输协议头传递给GET调用。

请查找代码段:

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中传递头,需要对相同的代码进行哪些更改。

共有3个答案

欧阳勇
2023-03-14

通用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;
}
施驰
2023-03-14

getForEntity不支持设置标题。使用交换

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);
卢和昶
2023-03-14

使用您的代码为:

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();
 类似资料:
  • 这是我的第一篇文章。 我刚刚开始学习围棋和Angular,我正试图将角应用程序连接到围棋api。这两篇文章我都写过了,我一直在寻找问题的根源。我认为这是一个CORS问题,但是如果我不在角超文本传输协议请求中包含标题代码行,它就可以正常工作。在这一点上,我只是想添加标题。授权代码尚未实现。 这两个应用程序都在本地运行,Go应用程序位于端口5000,Angular应用程序位于端口4200 不起作用的角

  • 我正在使用GWT和Spring controller来管理http流量。有些请求可能需要很长时间,但我希望在超过给定时间时终止请求。 我如何配置超时Spring。我也使用Apache Tomcat 7.0。我试图在tomcat上inrease最大线程,但有一段时间tomcat工作缓慢,因为请求线程不会死。

  • 我有专有的基于http的API要从JMeter测试。不幸的是,API的一些endpoint希望http DELETE方法带有请求体(我知道它的API设计有问题,使用DELETE with request body,但我无法更改该API,需要对其进行测试)。 如何从JMeter测试它?似乎标准的HttpRequest采样器在没有任何警告的情况下默默忽略了我的身体有效载荷。(当我在《邮递员》中尝试它时

  • 我必须向一些没有任何参数的API发送GET请求,所以我编写了代码: 当API url是HTTP时,它可以工作,但不适用于HTTPS。它说: 太阳安全验证器。ValidatorException:PKIX路径生成失败:sun。安全供应商。certpath。SunCertPathBuilderException:找不到请求目标的有效证书路径;嵌套的异常是javax。网ssl。例外:太阳。安全验证器。V

  • 使用vertx http代理(https://github.com/eclipse-vertx/vertx-http-proxy),添加/插入自定义身份验证机制(例如基于客户端证书的LDAP身份验证和为后端目标填充授权基本标头)的最佳方式是什么?

  • 为什么它不起作用? 返回java.net中的错误=