如何解决在Micronaut
我正在尝试使用Micronaut构建网关应用程序。 在客户端上,它连接到REST API,而在控制器上,另一个应用程序正在发送请求。我能够流式传输请求,但不能传输路径变量/参数。 例如,如何将控制器中收到的path参数传递给客户端。
@Controller("/bintray")
public class BintrayController {
private final BintrayLowLevelClient bintrayLowLevelClient;
private final BintrayClient bintrayClient;
public BintrayController(BintrayLowLevelClient bintrayLowLevelClient,BintrayClient bintrayClient
) {
this.bintrayLowLevelClient = bintrayLowLevelClient;
this.bintrayClient = bintrayClient;
}
@Get(uri = "/packages/{paramFromRequest}",produces = MediaType.APPLICATION_JSON_STREAM)
Flowable<BintrayPackage> packages() {
return bintrayClient.fetchPackages();
}
}
@Client(BintrayConfiguration.BINTRAY_API_URL)
public interface BintrayClient {
@Get("/api/${bintray.apiversion}/packages/{paramFromRequest}")
Flowable<BintrayPackage> fetchPackages();
}
非常感谢您的帮助。
解决方法
您可以使用HttpRequest
动态获取路径和查询参数:
@Get(uri = "/packages",produces = MediaType.APPLICATION_JSON_STREAM)
Flowable<BintrayPackage> packages(HttpRequest<?> request) {
return bintrayClient.fetchPackages(request.getParameters());
}
对于Http客户端,我不会选择一个声明式客户端,而是低级别的客户端,然后手动添加查询参数以及您想要在http查询中添加的内容
,我不清楚问题是什么,但这可能会有所帮助。而不是在您的控制器中...
@Get(uri = "/packages/{paramFromRequest}",produces = MediaType.APPLICATION_JSON_STREAM)
Flowable<BintrayPackage> packages() {
return bintrayClient.fetchPackages();
}
您可以这样做...
@Get(uri = "/packages/{paramFromRequest}",produces = MediaType.APPLICATION_JSON_STREAM)
Flowable<BintrayPackage> packages(String paramFromRequest) {
return bintrayClient.fetchPackages();
}
在客户端中,代替此...
@Get("/api/${bintray.apiversion}/packages/{paramFromRequest}")
Flowable<BintrayPackage> fetchPackages();
你可能有这个...
@Get("/api/${bintray.apiversion}/packages/{paramFromRequest}")
Flowable<BintrayPackage> fetchPackages(String paramFromRequest);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。