我有 2 个微服务,ProductStore和InvoiceStore。
我希望ProductStore通过API
和InvoiceStore提供产品信息来调用that API
以从ProductStore获取产品信息。但是ProductStore需要Authorization
检查信息,user authentication
因此我将@RequestHeader("Authorization") String auth
其用作我的参数变量FeignAPI
将其发送到ProductStore。Authorization
但是它报告说我测试它时他没有收到数据。
我@RequestHeader
这样使用是因为我在feign-reactive all 功能的示例中看到了它
我不知道是我在某处做错了什么还是我误解了@RequestHeader
.
请帮帮我!这是我的代码。
我的ProductStore提供了能够获取产品信息的 API。
@GetMapping("products")
public ResponseEntity<String> test(@RequestHeader("Authorization") String authorization) {
log.debug("Authorization is {}", authorization);
return ResponseEntity.ok().body("all products");
}
我的InvoiceStorefeign-reactive
使用WebReactiveFeign调用该 API 。
我按照Playtika feign-reactive的自述文件中的说明将其应用到我的项目中,如下所示
首先,我写 FeignAPI
@Headers({ "Accept: application/json" })
public interface FeignClientAPI {
@RequestLine("GET /products")
Mono<String> getProducts(@RequestHeader("Authorization") String authorization);
}
然后,我建立客户端IvoiceService
@Service
@Transactional
public class InvoiceService {
private final FeignClientAPI client = WebReactiveFeign.<FeignClientAPI>builder().target(FeignClientAPI.class, "http://localhost:8082");
public Mono<String> testFeign(String authorization){
log.debug("Call api with authorization: {}", authorization);
return client.getTest(authorization);
}
}
然后,我创建了一个 API
@GetMapping("/invoice/test")
public Mono<ResponseEntity<String>> getProducts(@RequestHeader("Authorization") String authorization) {
return invoiceService.testFeign(authorization)
.switchIfEmpty(Mono.error(new ResponseStatusException(HttpStatus.NOT_FOUND)))
.map(response -> ResponseEntity.ok().body(response));
}
最后,我发出GET
请求,localhost:8083/invoice/test
但出现错误
{
"title": "Internal Server Error",
"status": 500,
"detail": "[400 Bad Request] during [GET] to [http://localhost:8082/products] [FeignClientAPI#getTest(String)]: [{\n \"title\" : \"Bad Request\",\n \"status\" : 400,\n \"detail\" : \"Required request header 'Authorization' for method parameter type String is not present\",\n \"path\" : \"/products\",\n \"message\" : \"error.http.400\"\n}]",
"path": "/invoice/test",
"message": "error.http.500"
}
告诉我我哪里做错了,拜托!!!谢谢你为我做的一切。