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 方法)、请求参数等来做到这一点。
在 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 方法)、请求参数等来做到这一点。