Spring boot 如何在SpringWebFlux中读取类路径资源中存储的JSON文件?

Spring boot 如何在SpringWebFlux中读取类路径资源中存储的JSON文件?,spring-boot,spring-webflux,Spring Boot,Spring Webflux,我是SpringWebFlux的新手。我想读取存储在类路径资源中的JSON文件,并将其转换为POJO类。文件夹结构是resources/defaults/myjson.json。我在用杰克逊来转换。读取后,将转换为MyJson.java。到目前为止,我正在采用以下方法 @服务 公共类MyService{ 私有最终ObjectMapper ObjectMapper; 私有MyJson-MyJson; @自动连线 公共MyServiceObjectMapper对象映射器对象映射器{ this.obj

我是SpringWebFlux的新手。我想读取存储在类路径资源中的JSON文件,并将其转换为POJO类。文件夹结构是resources/defaults/myjson.json。我在用杰克逊来转换。读取后,将转换为MyJson.java。到目前为止,我正在采用以下方法

@服务 公共类MyService{ 私有最终ObjectMapper ObjectMapper; 私有MyJson-MyJson; @自动连线 公共MyServiceObjectMapper对象映射器对象映射器{ this.objectMapper=objectMapper; this.myJson=MyFileUtils.readFileobjectMapper,classpath:/defaults/myJson.json,myJson.class; } 公共MyJson getMyJson{ 返回this.myJson; } } 还有其他方法吗?

您可以使用ObjectMapper

这里Pojo定义您的Pojo类。

您可以使用ObjectMapper


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

感谢您提出的这个问题,也感谢gnana jeyam95,她的回答帮助了我

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

也许,如果这是一个问题,您可以在应用程序启动期间一次性加载POJO,然后始终使用SerializationUtils(例如)克隆加载的POJO,以便在应用程序启动完成后不再需要读取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
    }
}
然而,我不知道这种优化是不是一个好主意。
此外,可能还有一种更优雅的方式来做到这一点。。。如有任何意见,将不胜感激^_^

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

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

也许,如果这是一个问题,您可以在应用程序启动期间一次性加载POJO,然后始终使用SerializationUtils(例如)克隆加载的POJO,以便在应用程序启动完成后不再需要读取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
    }
}
然而,我不知道这种优化是不是一个好主意。
此外,可能还有一种更优雅的方式来做到这一点。。。如有任何意见,将不胜感激^_^

好的。现在我有一个疑问。这是一个阻塞IO,不是吗?是的,这是阻塞IO。您可以通过创建单独的线程并将此任务发送给该线程来修改此代码以支持非阻塞IO。好的。现在我有一个疑问。这是一个阻塞IO,不是吗?是的,这是阻塞IO。您可以通过创建单独的线程并将此任务发送到该线程来修改此代码以支持非阻塞IO。无需克隆。正如gnana jeyam95所说的,我已经采取的方式(这一点值得商榷)已经足够了。这将使应用程序无阻塞。无需克隆。正如gnana jeyam95所说的,我已经采取的方式(这一点值得商榷)已经足够了。这将使应用程序无阻塞。