转换一个JSON文件转换成Java对象的Web服务器启动时

问题描述 投票:0回答:3

我有一个JSON文件我使用对象映射下面给出其转换为Java对象: -

String agentName = Request.getAgentName();
ObjectMapper mapper = new ObjectMapper();
agent = mapper.readValue(new File(agentName), Agent.class);

这些工作正常,但问题是,对于每一个请求,我正在转换JSON到Java对象,我想我的Web服务器启动时做一次。我如何能做到这一点,这是一个休息的应用程序。

java json
3个回答
1
投票

这可能是使用Singleton类与图保持所有的代理商要求初始化一个可能的解决方案。

public class Agents {

    private static Agents theInstance;

    private final Map<String, Agent> AGENTS_MAP;

    private Agents() {
        this.AGENTS_MAP = new HashMap<>();
    }

    public static Agents getInstance() {
        if (theInstance == null) {
            theInstance = new Agents();
        }

        return theInstance;
    }

    public Agent getAgent(String agentName) {
        if (!AGENTS_MAP.containsKey(agentName) {
            initAgent(agentName);
        }

        return AGENTS_MAP.get(agentName);
    }

    // TODO handle errors
    private static void initAgent(String agentName) {
        ObjectMapper mapper = new ObjectMapper();
        Agent agent = mapper.readValue(new File(agentName), Agent.class);
        AGENTS_MAP.put(agentName, agent);
    }
}

0
投票

您可以使用@PostConstruct您的变量初始化:

@PostConstruct 
public void initApplication() {
    String agentName = Request.getAgentName();
    ObjectMapper mapper = new ObjectMapper();
    agent = mapper.readValue(new File(agentName), Agent.class); 
}

0
投票

我想这些都可以工作,我会在我的ServletContextListner类中创建代理类的对象和方法contextInitialized下,我会通过了所有的代理列表创建代理类的对象。

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ipaylabs.eme.vo.main.Agent;

public class Agents {
    private static Agents theInstance;
    private static Map<String, Agent> AGENTS_MAP;

    public Agents(String[] agentList) {
        this.AGENTS_MAP = new HashMap<>();
        for(String agentName : agentList) {
            initAgent(agentName);
        } 
    }

    public Agent getAgent(String agentName) {
        if (!AGENTS_MAP.containsKey(agentName)) {
            initAgent(agentName);
        }
        return AGENTS_MAP.get(agentName);
    }


    private static void initAgent(String agentName) {
        ObjectMapper mapper = new ObjectMapper();
        Agent agent = null;
        try {
            agent = mapper.readValue(new File(agentName), Agent.class);
        } catch (JsonParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JsonMappingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        AGENTS_MAP.put(agentName, agent);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.