在我的Spring Webflux API网关中,我通过REST从微服务接收流量:
public Flux<MyObject> getMyObjects(String id) {
Flux<MyObject> myObjects = webClient.get().uri(nextServerUrl + "/myobject" + issueId)
.accept(MediaType.APPLICATION_JSON)
.retrieve()
.bodyToFlux(MyObject.class);
return myObjects;
}
我必须重新排列API网关中微服务接收到的信息,以便响应客户端。我尝试了两种方法:
private Rearranged createClientResponse(String id) {
Rearranged rearranged = new Rearranged();
Flux<MyObject> myObjects = myObjectService.getMyObjects(id);
rearranged.setMyObjects(myObjects);
myObjects.map(myObject -> {
rearranged.setInfo(myObject.getInfo());
//set more
return myObjects;
});
return rearranged;
}
public class Rearranged {
private Flux<MyObject> myObjects;
//more attributes
}
结果:以下为空对象:
{
"information": null,
"myObjects": {
"scanAvailable": true,
"prefetch": -1
}
}
private Rearranged createClientResponse(String id) {
Rearranged rearranged = new Rearranged();
List<MyObject> myObjects = myObjectService.getMyObjects(id).collectList().block();
rearranged.setMyObjects(myObjects);
rearranged.setInfo(myObjects.get(0).getInfo());
return rearranged;
}
public class Rearranged {
private List<MyObject> myObjects;
//more attributes
}
结果:接收异常块()/blockFirst()/blockLast()时,线程中不支持阻塞
要实现从微服务响应重新排列信息以响应客户机的可能性,正确的方法是什么?我如何才能阻止通量完成?我知道当我返回一个“同步”对象时,一个块是可能的(就像我正在做的,但仍然得到异常)?
首先,您的模型不应该计算反应流。使用普通对象或列表。
public class Rearranged {
private MyObject myObject;
}
或者
public class Rearranged {
private List<MyObject> myObjects;
}
如果阻塞线程,反应器线程将在片刻内耗尽。如果getMyObject
方法只接收一个对象(如果没有,请查看注释的末尾),那么您应该将其作为Mono
处理。然后在createClient响应
中,您必须返回Mono
private Mono<Rearranged> createClientResponse(String id) {
Mono<MyObject> myObjects = myObjectService.getMyObjects(id);
return myObjects.map(myObject -> {
retrun new Rearranged(myObject)
//create the proper object here
});
}
如果您需要更多的对象,您可以使用相同的方法,例如,
CollectList()
从Flux收集元素
问题内容: 我想在单个请求中发送多个不同的JSON对象,我觉得在单个请求中像文件一样流式传输多个JSON对象会更好,所以请告诉我是否可行,如果可以的话请给我一个思路要使用Alamofire做到这一点,下面是我要发布的原始正文(应用程序/ json)数据的格式 我尝试了下面的代码,但是由于body参数的格式不正确,因此无法正常工作,这就是我想尝试在单个请求中将多个JSON对象作为流发送的原因,请注意
问题内容: 我想用来将json对象流放入json数组中,例如,从 至 但这行不通 自从我得到 问题答案: 用该选项将其混为一谈。 作为另一种选择,使用读取值是更灵活的选择。通常,您需要将此选项与选项结合使用,以防止第一个值过早消耗。
问题内容: 嗨,我正在一个项目中,需要通过HttpClient发送某个对象的潜在巨大json,典型大小是10-20 mb的JSON。为了有效地做到这一点,我想使用流,两者都通过Json.Net来序列化一个对象,另外还要使用流来使用HttpClient发布数据。 问题 这是使用Json.net进行序列化的代码段,为了使用流,Json.net希望它将写入其中: 虽然HttpClient期望从中读取的流
问题内容: 我在Spring Boot中有一个示例RestController: 我正在使用JSON库 当我点击API时,我得到一个异常提示: 路径为[]的Servlet [dispatcherServlet]的Servlet.service()抛出异常[请求处理失败;嵌套异常为java.lang.IllegalArgumentException:未找到类型为org.json.JSONObject
我在Spring Boot中有一个RestController示例: 我正在使用JSON库 当我点击API时,我得到一个异常: 路径为[]的上下文中servlet[dispatcherServlet]的servlet.service()引发异常[请求处理失败;嵌套异常为java.lang.IllegalArgumentException:没有找到具有根本原因的返回值:class org.json.
问题内容: 我有一个本地JSON对象,其格式如下: 我想设置此作为一个jQuery的数据源的数据表,并尝试这样的: DataTables插件加载并尝试绘制表,但显示错误“表中无可用数据” 我不是在进行AJAX调用,只是想从本地JS变量访问JSON对象。 问题答案: 提供您自己的数据的属性不是: 工作小提琴