【发布时间】: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