在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); 

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...