micronaut 将 httprequest 重定向到不同的服务

micronaut redirect httprequest to different service

在 micronaut 中有声明式客户端:

@Client("http://localhost:5000")
public interface ServiceB {

    @Get("/ping")
    HttpResponse ping(HttpRequest httpRequest);
}

在我的 controller class 中,我想将传入请求重定向到 ServiceB

@Controller("/api")
public class ServiceA {

    @Inject
    private ServiceB serviceB;

    @Get("/ping)
    HttpResponse pingOtherService(HttpRequest httpRequest){
        return serviceB.ping(httpRequest)
    }

}

然而,由于请求中编码的信息,ServiceB 似乎永远不会收到请求。如何将请求从 ServiceA 转发到 ServiceB

客户端无法直接发送HttpRequest。他将根据客户的参数构建一个。

我试图在客户端的 body 中发送重定向请求,但出现堆栈溢出错误:jackson 无法将其转换为字符串。

不幸的是,您不能更改请求中的 URI 以将其发回,没有 HttpRequest 实现在 URI 上有 setter。

如果你真的想发送完整的请求(header、body、params...)你可以尝试配置一个代理。

否则,如果您不必传递完整的请求,您可以通过客户端传递您需要的内容:

客户端示例:

@Client("http://localhost:8080/test")
public interface RedirectClient {

  @Get("/redirect")
  String redirect(@Header(value = "test") String header);

}

控制器:

@Slf4j
@Controller("/test")
public class RedirectController {

  @Inject
  private RedirectClient client;

  @Get
  public String redirect(HttpRequest request){
    log.info("headers : {}", request.getHeaders().findFirst("test"));
    return client.redirect(request.getHeaders().get("test"));
  }

  @Get("/redirect")
  public String hello(HttpRequest request){
    log.info("headers : {}", request.getHeaders().findFirst("test"));
    return "Hello from redirect";
  }
}

我为一个 header 做到了,但您可以使用 body(如果不是 GET 方法)、请求参数等来做到这一点。