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

如何读取一个JSON文件存储在类路径资源在Spring Webflow?

米树
2023-03-14

我是Spring WebFlux的新手。我想读取存储在< code>classpath resource中的JSON文件,并将其转换为POJO类。文件夹结构为< code > resources/defaults/my JSON . JSON 。我在利用杰克逊进行转化。读取后,它将被转换为< code>MyJson.java。现在,我正在做下面的方法。

@Service
public class MyService {

    private final ObjectMapper objectMapper;
    private MyJson myJson;

    @Autowired
    public MyService(ObjectMapper objectMapper) {
        this.objectMapper = objectMapper;
        this.myJson = MyFileUtils.readFile(objectMapper, "classpath:/defaults/myjson.json", MyJson.class);
    }

    public MyJson getMyJson() {
        return this.myJson;
    }
}

还有别的办法吗?

共有2个答案

阎枫涟
2023-03-14

谢谢你的问题,也谢谢gnana jeyam95,她的回答帮助了我。

我想回答你这将是一个阻塞IO的事实(我自己不知道这是真的还是假的)。

也许,如果这是一个问题,您可以在应用程序启动期间一次性加载POJO,然后始终克隆加载的POJO(例如使用SerializationUtils),这样一旦应用程序启动完成,您就不需要再读取JSON文件了。

我在我的项目中做了这样的事情:

import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.lang3.SerializationUtils;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;

@Service
public class FooServiceImpl implements FooService {
    private Pojo pojo;

    @PostConstruct
    void init() {
        try {
            pojo = new ObjectMapper().readValue(new ClassPathResource("pojo.json").getFile(), Pojo.class);
        } catch (IOException e) {
            // Log error
        }
    }

    public void myMethodNeedingPojoFromJson() {
        // Do stuff
        Pojo methodPojo = SerializationUtils.clone(pojo);
        // Do other stuff
    }
}

然而,我不知道这种优化是不是一个好主意。此外,可能还有一种更优雅的方式来做到这一点……任何评论都将不胜感激^_^

金毅
2023-03-14

您可以使用对象映射器

Pojo pojo = new ObjectMapper().readValue(new ClassPathResource("./defaults/myjson.json").getFile(), Pojo.class);

在这里,Pojo定义您的Pojo类。

 类似资料:
  • 问题内容: 这是我想做的,我想知道是否有任何Spring类可以帮助实现。对于这个特定的问题,我不必使用spring,我只是将其与其他所有东西一起实现。 在我的DAO层中,我想外部化我的sql文件,也就是每个文件1个sql。我想读取并缓存sql语句,甚至可能作为spring bean单例。但是在我最初的挣扎中,我只是在类路径中加载一个sql文件时遇到问题… 春天有什么可以帮助您的吗?我已经阅读过文档

  • 问题内容: 我正在尝试获取资源的途径,但是我没有运气。 这是可行的(在IDE和JAR中都可以),但是这样一来,我无法获取文件的路径,只能获取文件内容: 如果我这样做: 结果是: 有没有办法获取资源文件的路径? 问题答案: 这是故意的。“文件”的内容可能无法作为文件使用。请记住,您正在处理的类和资源可能是JAR文件或其他类型的资源的一部分。类加载器不必为资源提供文件句柄,例如jar文件可能尚未扩展为

  • 使用Spring Boot 2.1.5版本,我们创建了以下示例Spring Boot微服务: Maven项目结构: 有以下JSON文件(在src/main/Resources/data.json中): 微服务应用: 引发以下异常: FilePathUtils.java: 我可能做错了什么?

  • 我正在保存一个excel文件到设备(Android7)的存储,现在我想当用户点击按钮时打开excel文件,但现在当按钮点击应用程序会崩溃,而当im到我的存储和im打开文件直接在我的应用程序之外没有问题!!如果我的代码行错了,请帮忙,谢谢 日志:Android.os.FileUriExposedException:file:///storage/emulated/0/MessangerApp/Mes

  • 我一直在使用本教程对图片进行人脸检测。问题是当我获取java上使用的文件路径时 我怎么能在android Studio上翻译。我试着把我的lbpcascade_frontalface.xml放在原始资源上。Cascade分类器是opencv库提供的一个类。唯一的问题是他们只加载字符串路径(在xmlfile上)。这是我的代码。 我翻译成这样的方法。 我得到opencv的一个片段错误,它告诉我文件为空