首页 > 解决方案 > 在 Micronaut 中从控制器到客户端绑定/传递请求参数

问题描述

我正在尝试使用 Micronaut 构建网关应用程序。在客户端,它连接到 REST API,而在控制器端,另一个应用程序正在发送请求>我能够流式传输请求,但不能流式传输路径变量/参数。例如,我如何将控制器中接收到的路径参数传递给客户端。

@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(); 

}

非常感谢您的帮助。

标签: parameterspathbindingmicronaut

解决方案


您可以使用以下方法动态获取路径和查询参数HttpRequest

@Get(uri = "/packages", produces = MediaType.APPLICATION_JSON_STREAM) 
Flowable<BintrayPackage> packages(HttpRequest<?> request) { 
    return bintrayClient.fetchPackages(request.getParameters());
}

至于 Http 客户端,我不会选择声明式客户端,而是使用低级客户端,并手动添加查询参数以及您在 http 查询中想要的内容


推荐阅读