当前位置:  开发笔记 > 编程语言 > 正文

将一些JSON文件加载到Spring Boot应用程序的最佳方法

如何解决《将一些JSON文件加载到SpringBoot应用程序的最佳方法》经验,为你挑选了1个好方法。

我即将创建一个Rest webservice应用程序,我需要在应用程序启动时加载存在于作为参数传递的文件夹中的所有JSON文件(在application.yml中先验),以便稍后在webservices的方法中使用它们bean列表(每个JSON文件对应一个bean).

一个样本,以进一步解释我的要求:

application.yml:

json.config.folder: /opt/my_application/json_configs

MyApplication.java:

package com.company;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

具有以下结构的JSON文件:

    {  
   "key":"YYYYY",
   "operator_list":[  
        {  
           "name":"operator1",
           "configs":{  
               "id":"XXXXX1",
               "path":"xxxx2"
           }
        },
        {  
            "name":"operator2",
            "configs":{  
                "id":"XXXXX1",
                "passphrase":"xxxx2",
                "user_id":"XXXX3",
                "password":"XXXXX"
            }
        },
        {  
            "name":"operator3",
            "configs":{  
                "user_id":"XXXXX1"
            }
        }
    ]
    }

RestAPI.java

@RestController
@RequestMapping("/my_app_url")
@PropertySource(value={"classpath:application.yml"})
public class RestAPI {
    //Some fields
    ....

    //Some methods
    ....

    //Method that return operator list of a given context (correspond to the field "key" of the json file)
    @RequestMapping("/getOperatorList")
    public List getOperatorList(@RequestParam(value = "context", defaultValue = "YYYYY") String context) throws Exception{
        List result = null;
        //Here, i need to loop the objects , that are supposed to be initialized during application startup 
        //(but i I do not know yet how to do it) with data from JSON files
        //to find the one that correspond to the context in parameter and return its operator list

        return result;
    }
}

ContextOperatorBean.java将包含先验的JSON文件信息:

package com.company.models;

import java.util.List;

public class ContextOperatorBean {
    String key;
    List operator_list;

    public ContextOperatorBean() {
    }

    public ContextOperatorBean(String key, List operator_list) {
        this.key = key;
        this.operator_list = operator_list;
    }

    public String getKey() {
        return key;
    }

    public void setKey(String key) {
        this.key = key;
    }

    public List getOperator_list() {
        return operator_list;
    }

    public void setOperator_list(List operator_list) {
        this.operator_list = operator_list;
    }
}

另一个名为Operator.java的类包含所有运算符信息.

是否有方法ContextOperatorBean在应用程序启动时初始化包含所有JSON文件的信息的对象列表,并在我的Web服务方法(RestAPI.java类)中使用它们?



1> kryger..:

不知道以下天真的实现是否满足"最佳"的标准,但您可以创建一个处理此责任的新服务,例如:

@Service
public class OperatorsService {

    @Value("${json.config.folder}")
    String jsonConfigFolder;

    List operators = new ArrayList<>();

    @PostConstruct
    public void init() throws IOException {
        ObjectMapper jsonMapper = new ObjectMapper();
        for (File jsonFile : getFilesInFolder(jsonConfigFolder)) {
            // deserialize contents of each file into an object of type
            ContextOperatorBean operator = jsonMapper.readValue(jsonFile, new TypeReference>() {});
            operators.add(operator);
        }
    }

    public List getMatchingOperators(String context) {
        return operators.stream().filter(operator -> checkIfMatches(operator, context)).collect(Collectors.toList());
    }

    private boolean checkIfMatches(ContextOperatorBean operator, String context) {
        // TODO implement
        return false;
    }

    private File[] getFilesInFolder(String path) {
        // TODO implement
        return null;
    }
}

注意:省略处理故障或意外情况以及一些实施细节.

然后@Autowire它在您的控制器中并调用getMatchingOperators()以仅过滤匹配的条目.

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有