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

Java WebFlux在使用应用程序/流时不发送数据+;json,java,reactive-programming,spring-webflux,project-reactor,reactive,Java,Reactive Programming,Spring Webflux,Project Reactor,Reactive,我有一个反应式核心WebClient要发布到给定的端点。有效负载是Job对象的流量,内容类型是application/stream+json Flux jobFlux=Flux.just(newjob()) 存储库当前只是一个存根: @Repository public class DemoJobRepository implements ReactiveRepository<Job> { private static Logger logger = LoggerFactory

我有一个反应式核心WebClient要发布到给定的端点。有效负载是
Job
对象的流量,内容类型是application/stream+json Flux jobFlux=Flux.just(newjob())

存储库当前只是一个存根:

@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;
}
}
@存储库
公共类DemoJobRepository实现了ReactiveRepository{
私有静态记录器Logger=LoggerFactory.getLogger(DemoJobRepository.class);
私有最终列表作业=Lists.newArrayList();
@凌驾
公共Mono创建(发布者jobStream){
返回Flux.from(jobStream).doOnNext(jobs::add).then();
}
@凌驾
公共交通{
返回流量。从可计算(作业);
}
@凌驾
公共Mono findById(字符串id){
返回null;
}
}
我没有看到客户端试图发送requestbody。我在客户机上调用了
block
来获得结果,我看到客户机发送了请求,但是服务器端点总是看到一个空流量。请,非常感谢您的帮助。

对于被动类型,-构建被动管道不会执行它应该执行的操作,只有订阅它才能启动流程

有几种订阅方式:

  • 调用任何
    subscribe
    变体。其中许多将lambda作为参数,在处理完成或以错误结束时执行。使用空变量有点冒险,因为它只启动执行,但不会得到任何回调。从技术上讲,没有任何东西在等待它,因此JVM可以在处理完成之前退出

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

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


据我所知,我不应该“中断反应管道,将请求的读取和响应的写入分离;在控制器有机会读取整个请求之前,HTTP交换可能会关闭。调用subscribe就是这样做的。”你是说在存储库中调用
subscribe
?另外,我使用的内容类型是application/stream+json,因为目的是通过连接流式传输数据,而不是发出许多单独的请求。我不确定你是否理解我的意图。我的问题的第二个问题是:负载是一系列作业对象,内容类型是application/stream+json,因此我不打算创建多个请求,而是流式传输负载直到完成。您将一个对象发送到服务器。流媒体绝对没有区别。流式JSON数据意味着单独发送对象,而不是一次发送所有对象,这可以减少内存消耗。关于请求没有区别。调用
retrieve
确实会发送请求并请求响应正文-但由于它返回一个被动类型,在订阅之前不会发生任何事情。
  @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); 
 }
  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;
}
}