Spring 订阅服务器onnext不包含完整的项目

Spring 订阅服务器onnext不包含完整的项目,spring,project-reactor,Spring,Project Reactor,我们正在和项目反应堆合作,现在有一个巨大的问题。这是我们制作和发布数据的方式: public Flux<String> getAllFlux() { return Flux.<String>create(sink -> { new Thread(){ public void run(){ Iterator<Cache.Entry<String, MyObject>>

我们正在和项目反应堆合作,现在有一个巨大的问题。这是我们制作和发布数据的方式:

public Flux<String> getAllFlux() {
    return Flux.<String>create(sink -> {
        new Thread(){
            public void run(){
                Iterator<Cache.Entry<String, MyObject>> iterator = getAllIterator();
                ObjectMapper mapper = new ObjectMapper();

                while(iterator.hasNext()) {
                    try {
                        sink.next(mapper.writeValueAsString(iterator.next().getValue()));
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }

                sink.complete();
            }
        } .start();
    });
}
但对于某些项目,字符串会像这样断开,例如:

{"itemId": "some"
之后的下一项是

"Id", "itemDesc", "some description"}
这些削减没有模式。它是完全随机的,每次我们运行代码时都是不同的。当然,我们的jackson正因为这种行为而在输入端出现意外错误

那么是什么导致了这种行为?我们如何解决它呢?

解决方案:

发送通量中的对象,而不是字符串:

public Flux<ItemIgnite> getAllFlux() {
   return Flux.create(sink -> {
       new Thread(){
           public void run(){
               Iterator<Cache.Entry<String, ItemIgnite>> iterator = getAllIterator();

               while(iterator.hasNext()) {
                   sink.next(iterator.next().getValue());
               }
           }
       } .start();
   });
} 
这里的关键是使用stream+json,而不仅仅是json

"Id", "itemDesc", "some description"}
public Flux<ItemIgnite> getAllFlux() {
   return Flux.create(sink -> {
       new Thread(){
           public void run(){
               Iterator<Cache.Entry<String, ItemIgnite>> iterator = getAllIterator();

               while(iterator.hasNext()) {
                   sink.next(iterator.next().getValue());
               }
           }
       } .start();
   });
} 
@RequestMapping(value="/allFlux", method=RequestMethod.GET, produces="application/stream+json")