当前位置: 首页 > 知识库问答 >
问题:

WebFlux在使用应用程序/流json时不发送数据

谷梁嘉运
2023-03-14

我有一个反应式核心WebClient要发布到给定的endpoint。有效负载是Job对象的流量,内容类型是application/stream json flux jobFlux=flux。只是(新工作);

Mono<JsonNode> response = localEP.post().uri( "/dev/job" )
    .contentType(MediaType.APPLICATION_STREAM_JSON)
    .body( BodyInserters.fromObject(jobFlux))
    .retrieve()
    .bodyToMono( JsonNode.class );

在服务器端,我尝试了Spring控制器样式和Spring Web反应式FunctionHandler,以使用流量负载处理上述调用的负载。

  @PostMapping(path = "/dev/job", consumes = MediaType.APPLICATION_STREAM_JSON_VALUE)
  @ResponseStatus( HttpStatus.CREATED )
 public Mono<Void> loadJobs (@RequestBody Flux<Job> jobs) {
    return this.repository.create(jobs); 
 }

当实例化一个新对象时,域类Job创建和标识:

  public Job() {
    UUID guid = UUID.randomUUID();
    id = guid.toString();
    title = "Random String";
  }

仓库目前只是一个存根:

@Repository
public class DemoJobRepository implements ReactiveRepository<Job> {
   private static Logger logger = LoggerFactory.getLogger(DemoJobRepository.class);
   private final List<Job> jobs = Lists.newArrayList();

@Override
public Mono<Void> create(Publisher<Job> jobStream) {
    return Flux.from(jobStream).doOnNext(jobs::add).then();
}

@Override
public Flux<Job> getAll() {
    return Flux.fromIterable(jobs);
}

@Override
public Mono<Job> findById(String id) {
    return null;
}
}

我没有看到客户端试图发送requestbody。我在客户机上调用了block来获得结果,我看到客户机发送了请求,但是服务器endpoint总是看到一个空流量。请,任何帮助都非常感谢。

共有1个答案

燕元明
2023-03-14

对于被动类型,在您订阅之前不会发生任何事情-构建被动管道不会执行它应该执行的操作,只有订阅它才会启动流程。

有几种订阅方式:

>

调用任何/收集方法。这不仅订阅,而且返回期望值。

这两种选择都不应该在返回反应性类型的方法中进行,否则这将导致应用程序中出现严重问题。

 类似资料:
  • 我正在评估使用Spring Webflux,但我们必须支持期望Application/JSON,而不是Application/Stream+JSON的客户机。我不清楚Spring WebFlux如何在需要Application/JSON的客户机的情况下处理Flux的序列化。 如果一个Flux序列化为application/json,而不是application/stream+json,这是一个阻塞

  • 问题内容: 我正在评估使用Spring Webflux,但我们必须支持期望使用application / json而不是application / stream + json的客户端。我不清楚在需要application / json的客户端中,Spring WebFlux如何处理序列化Flux。 如果将Flux序列化为application / json而不是application / stre

  • 我有一个关于Spring WebFlux的问题。我想创建一个使用内容类型text/event-stream的反应endpoint。不是生产而是消费。我们的一个服务需要向另一个服务发送大量的小对象,我们认为这样流式传输可能是一个很好的解决方案。 流量是每1秒产生一个值的流。我遇到的问题是,WebClient完全读取发布服务器,然后将数据作为一个整体发送,而不是一个接一个地流式传输。我能用这个客户机或

  • 但我只能得到: 当请求实体的内容类型不是application/x-www-form-urlencoded时,使用@FormParam 我的代码:

  • 我有一个java应用程序(不是web),它定期在文件系统和控制台上记录数据。该应用程序构建于Java中,并使用log4j-1.2.17.jar进行日志记录。 我已经将java应用程序配置为将日志数据发送到Azure的application insights资源。 当我在非调试模式下执行代码时,应用程序无法将日志数据发送到azure Portal。请让我知道我缺少了什么,以便应用程序开始以正常模式(

  • 问题内容: 为什么在下面的代码中将数据发送为JSON格式而不是? 问题答案: 因为您既未指定请求内容类型,也未指定正确的JSON请求。这是发送JSON请求的正确方法: 注意事项: 使用此方法将javascript对象转换为本地和内置于现代浏览器中的JSON字符串。如果要支持较旧的浏览器,则可能需要包含json2.js 使用属性指定请求内容类型,以便向服务器指示发送JSON请求的意图 该属性用于服务