对于反应式编程和SpringWebClient来说,这是一个相当新的概念,所以我正在尝试了解它,本质上,我有一个分页的结果列表,可以从一个REST服务中使用,该服务使用一个链接响应头进行响应,该响应头带有一个与下一页结果(如果存在)相关的URI。我想把所有的页面都收集到一个通量中。默认情况下,生成的ApicClient具有如下内容
public <T> Flux<T> invokeFluxAPI(String path, HttpMethod method, Map<String, Object> pathParams,
MultiValueMap<String, String> queryParams, Object body, HttpHeaders headerParams,
MultiValueMap<String, String> cookieParams, MultiValueMap<String, Object> formParams,
List<MediaType> accept, MediaType contentType, String[] authNames, ParameterizedTypeReference<T> returnType)
throws RestClientException {
final WebClient.RequestBodySpec requestBuilder = prepareRequest(path, method, pathParams, queryParams, body,
headerParams, cookieParams, formParams, accept, contentType, authNames);
return requestBuilder.retrieve().bodyToFlux(returnType);
}
那么,我是否需要对结果的每一页进行某种递归调用,将每一页合并成一个流量?沿着……的路线
public <T> Flux<T> invokeFluxAPI(String path, HttpMethod method, Map<String, Object> pathParams,
MultiValueMap<String, String> queryParams, Object body, HttpHeaders headerParams,
MultiValueMap<String, String> cookieParams, MultiValueMap<String, Object> formParams,
List<MediaType> accept, MediaType contentType, String[] authNames, ParameterizedTypeReference<T> returnType)
throws RestClientException {
final WebClient.RequestBodySpec requestBuilder = prepareRequest(path, method, pathParams, queryParams, body,
headerParams, cookieParams, formParams, accept, contentType, authNames);
return requestBuilder.exchange()
.doOnSuccess(response -> {
List<String> links = response.headers().header("Link");
if (!links.isEmpty()) {
String nextPageUri = links.get(0);
// Get next page using the URI
}
})
.flatMapMany(response -> response.bodyToFlux(returnType));
}
所以我设法让这个工作通过处理客户端响应
作为一个结果页eg.
public <T> Flux<T> invokeFluxAPI(String path, HttpMethod method, Map<String, Object> pathParams,
MultiValueMap<String, String> queryParams, Object body, HttpHeaders headerParams,
MultiValueMap<String, String> cookieParams, MultiValueMap<String, Object> formParams,
List<MediaType> accept, MediaType contentType, String[] authNames, ParameterizedTypeReference<T> returnType)
throws RestClientException {
return fetchResultsPage(path, method, pathParams, queryParams, body, headerParams, cookieParams, formParams, accept, contentType, authNames).expand(response -> {
List<String> links = response.headers().header("Link");
if (links.isEmpty()) {
return Mono.empty();
}
Matcher m = "(?<=\\<)([^\\]]+)(?=\\>)".matcher(links.get(0));
if (!m.find())) {
return Mono.empty();
}
String nextPageUri = m.group(1);
MultiValueMap<String, String> qParams = UriComponentsBuilder.fromUriString(nextPageUri).build().getQueryParams();
queryParams.putAll(qParams);
queryParams.replace("limit", qParams.get("limit"));
return fetchResultsPage(path, method, pathParams, queryParams, body, headerParams, cookieParams, formParams, accept, contentType, authNames);
}).flatMap(response -> response.bodyToFlux(returnType);
}
private Mono<ClientResponse> fetchResultsPage(String path, HttpMethod method, Map<String, Object> pathParams,
MultiValueMap<String, String> queryParams, Object body, HttpHeaders headerParams,
MultiValueMap<String, String> cookieParams, MultiValueMap<String, Object> formParams,
List<MediaType> accept, MediaType contentType, String[] authNames) {
final WebClient.RequestBodySpec requestBuilder = prepareRequest(path, method, pathParams, queryParams, body,
headerParams, cookieParams, formParams, accept, contentType, authNames);
return requestBuilder.exchange();
}
我想在RESTful API中支持分页。 我的API方法应该通过返回产品的JSON列表。但是,可能有成千上万的产品,我想浏览它们,所以我的请求应该如下所示: 但我的JSON响应需要是什么样的呢?API使用者通常会在响应中期望分页元数据吗?还是只需要一系列产品?为什么? 看起来Twitter的API包含元数据:https://dev.twitter.com/docs/api/1/get/lists/
问题内容: 我的网络服务返回一个JSON对象,如下所示 即,当我将此地址放入chrome浏览器中时,我可以到达上面。 我正在尝试在浏览器中阅读此内容,以便可以创建一个下拉选项…但是从以下代码开始我一无所获: 我总是在警报框中。我用fiddler2再次检查了Web服务请求/响应是否正常,我什至可以拦截Web服务和浏览器之间的json对象。 我也试过 我又得到了空。 我已经看过Ajax要求的json响
我尝试通过Java执行一个SOAP请求并获得SOAP响应,然后从JSP页面调用它。我研究了许多网站,尝试了许多方法,但似乎无法让它工作。 我使用一些wsdl来测试http://www.webservicex.net/australianpostcode.asmx?wsdl 我一直收到这个错误 java.io.ioException:服务器返回HTTP响应代码:500的URL:HTTP://www.
问题内容: 是否可以在PHP中处理来自AJAX请求的响应?我不是一个真正的JS开发人员,所以我正在用这个开发人员。 我有点黑了: }); 该功能似乎可以正常运行,它会向我发出有关正确数据的警报。 我需要能够将此输出给用户,以便可读。我发现很多指南都描述了替换数据,但就目前而言,直到选择child_id之前,没有数据。.然后我希望它以可读的方式显示上述数据。 我不知道如何开始使用视图文件(php)中
我正在用Spring Boot编写一个后端应用程序,它从第三方调用另一个应用程序接口。 我对这个特定的调用有一个问题,它检索一个包含承载令牌的令牌对象,然后我在它们的其他endpoint中使用它。当调用其他终结点时,检索到的令牌有时工作,但大多数情况下不工作,从而导致未经授权的响应。 下面是一个示例令牌对象: 使用postman检索令牌工作得非常好,因此第三方API不会有问题。我在中也实现了相同的
在我的项目中,我创建了一个py函数,用于检查和修改我的谷歌日历,如下所示: 当我在lambda上测试它时,一切都完成了,但是当我从lambda创建API时: 并对其进行测试,结果是: 2017年12月20日星期三13:35:58 UTC:由于配置错误,执行失败:Lambda代理响应格式错误2017年12月20日星期三13:35:58 UTC:方法已完成,状态为:502 提前谢谢