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

如何使用spring webflux以反应式方式读取JSON文件?

桓风史
2023-03-14

我试图使用spring webflux以一种被动的方式从类路径中读取文件。我能阅读文件。但是我不能解析成Foo对象

我正在尝试以下方法,但不确定如何转换为FOO类。

public Flux<Object> readFile() {
    Flux<DataBuffer> readFile1 = DataBufferUtils.read("classpath:test.json", new DefaultDataBufferFactory(), 4096);
    return new Jackson2JsonDecoder().decode(readFile1,
        ResolvableType.forType(List.class,Foo.class), null, Collections.emptyMap());
    }

帮助赞赏。

共有2个答案

毛勇
2023-03-14

您可以使用杰克逊ObjectMapper:

ObjectMapper mapper = new ObjectMapper();
Student student = mapper.readValue(jsonString, Student.class);

在此之前,您应该读取文件并使用FileReader和readLines()逐行解析。

[更新]好的,对于读取文件,反应式意味着,读取流中的文件,并且每当读取一行时,处理此行。从这一点开始,BufferReader.readLines将会很好。但是如果你真的想使用反应式方式,你可以使用:

package com.test;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.stream.Stream;

public class TestReadFile {

    public static void main(String args[]) {

        String fileName = "c://lines.txt";
        try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
            stream.forEach(parseLine);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
轩辕亮
2023-03-14

我认为您这样做是正确的,但不幸的是,您必须将Object转换回正确的类型。这是安全的,因为如果JSON解码无法构造Foo的列表,它将失败:

public Flux<Foo> readFile() {
  ResolvableType type = ResolvableType.forType(List.class,Foo.class);
  Flux<DataBuffer> data = DataBufferUtils.read("classpath:test.json", new DefaultDataBufferFactory(), 4096);
    return new Jackson2JsonDecoder().decode(data, type, null, null)
        .map(Foo.class::cast);
}
 类似资料:
  • 我试图在操作中读取Excel文件,或向其中添加新数据并将其写回。我还试图用通量和Mono来完成一个完整的反应过程。其思想是通过webservice返回结果文件或bytearray。 我的问题是如何以非阻塞方式获取InputStream和OutputStream? 我正在使用Apache Poi库读取并生成Excel文件。 我目前有一个基于混合Mono.fromCallable()和阻塞代码获取输入

  • 我正在使用SpringWebSockets,我想从存储库返回一个项目列表 我怎么能在WebSocket会话中发送此列表 这是如何将项目列表发送到websocket的处理程序方法

  • 问题内容: 如何在不启动GUI的情况下如何编写python脚本来读取Tensorboard日志文件,提取损失和准确性以及其他数字数据? 问题答案: 您可以使用TensorBoard的Python类或脚本来提取数据: 如何从TensorBoard导出数据? 如果您想导出数据以在其他地方可视化(例如iPython Notebook),那也是可能的。您可以直接依赖TensorBoard用来加载数据的基础

  • 应用程序: 接收以下有效负载: 我需要按以下方式进行处理: > 使用转换后的数据向“卡通数据库”微服务发送HTTP POST请求。 我遇到的问题是: 我需要使用(|)和)的

  • 我相信我需要创建一个JsonReader对象并调用其中一个Json静态方法,但我在读取文件时遇到了问题。json。 创建读取器方法似乎要求输入是一个字符串。我应该继续尝试将我的整个JSON文件解释为字符串吗?

  • 问题内容: 当我向服务(我不拥有)发送请求时,它可能会以请求的JSON数据或看起来像这样的错误进行响应: 在这两种情况下,HTTP响应代码均为200 OK,因此我不能用它来确定是否存在错误-我必须反序列化响应以进行检查。所以我有这样的东西: 在这里,我有一个空的catch子句,该子句可能在标准执行路径中,这是一种难闻的气味……嗯,不仅仅是难闻的气味:它发臭。 您是否知道 “ TryParse” 响