【问题标题】:How to pass header in feign client especially HTTP Headers?如何在 feign 客户端尤其是 HTTP 标头中传递标头?
【发布时间】:2019-06-15 19:30:22
【问题描述】:

我尝试使用 Rest Template 传递 http 标头并按预期工作,但在某些情况下它无法与 feign 客户端一起使用。

休息客户端代码:-

import org.springframework.http.HttpHeaders;

RestTemplate restTemplate = new RestTemplate();
HttpHeaders httpHeader = new HttpHeaders();
httpHeader.set("appsecret-proof", header);
HttpEntity<?> request = new HttpEntity<>(httpHeader);
String url = "https://localhost/groups/{pathVariable}/members/";
Map<String, String> map = new HashMap<>();
map.put("pathVariable", pathVariable);
UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url)
                                                   .queryParam("token", token);
String uriBuilder = builder.build().toString();

ResponseEntity<MemberObject> responseEntity = restTemplate.exchange(uriBuilder, HttpMethod.POST, request,MemberObject.class, map);

MemberObject memberObject = null;
if (responseEntity != null && responseEntity.getBody() != null) {
    memberObject = responseEntity.getBody();
}

Fegin 客户端代码:-

import org.springframework.web.bind.annotation.RequestHeader;

@PostMapping(value = "/groups/?token=xyz")
MemberObject getMemberGroup(@RequestHeader("appsecret-proof") String appsecretProof);

但是 fegin 客户端给出错误:

{"error":{"message":"Authentication credentials could not be found.","type":"Authentication Error","code":404,"sub_code":0}}.

在 feign 客户端中硬编码令牌仍然给出相同的错误。标头可能有错误....任何建议如何在 feign 客户端中设置标头。

【问题讨论】:

  • @RequestHeader 应该与 spring cloud feign 一起使用。您的代码中可能存在不同的错误。您收到 404 错误。您是否尝试为 getMemberGroup 方法添加请求正文参数,因为它是 POST,但没有任何请求正文。
  • 是的...没有任何请求正文...最初尝试使用resttemplate时我也遇到了同样的错误...然后我意识到我输入了错误的标头数据类型,我更正了标头的数据类型,然后按预期工作。

标签: java spring-boot spring-cloud-feign


【解决方案1】:

如果你使用 Feign,你应该这样构造调用:

import feign.Headers;
import feign.Param;
import feign.RequestLine;
...
@RequestLine("POST /groups/?token={appSecretProof}")
@Headers("Content-Type: application/json")
MemberObject getMemberGroup(@Param("appSecretProof") String appSecretProof);

在上面的 sn-p 中,appSecretProof 的值在执行时作为 token 的对应值代入 URL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-14
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 2021-06-12
    • 2017-01-19
    相关资源
    最近更新 更多