Java,将JSON数组存储到类中,并从其他类调用它

Java,将JSON数组存储到类中,并从其他类调用它,java,arrays,json,jackson,stringbuilder,Java,Arrays,Json,Jackson,Stringbuilder,我试图从另一个类中的类中提取数据,并用数据填充JPanel,但由于某些原因它无法工作 这里是完整的restConnector类,我在其中提取JSON数据。 据我所知,这很好用 public class restConnector { private static final Logger LOGGER = LoggerFactory.getLogger(restConnector.class); private static final restConnector INSTANCE = ne

我试图从另一个类中的类中提取数据,并用数据填充JPanel,但由于某些原因它无法工作

这里是完整的restConnector类,我在其中提取JSON数据。 据我所知,这很好用

public class restConnector {

private static final Logger LOGGER = LoggerFactory.getLogger(restConnector.class);

private static final restConnector INSTANCE = new restConnector();


public static restConnector getInstance() {
    return restConnector.INSTANCE;
}

private restConnector(){        
}

private static String user = "ss";
private static String pwd = "ee


public static String encode(String user, String pwd) { 
    final String credentials =  user+":"+pwd; 
    BASE64Encoder encoder = new sun.misc.BASE64Encoder(); 
    return encoder.encode(credentials.getBytes()); 
} 


//Open REST connection
public static void init() {
    restConnector.LOGGER.info("Starting REST connection...");


    try {

        Client client = Client.create();
        client.addFilter(new LoggingFilter(System.out));

        WebResource webResource = client.resource("https://somewebpage.com/

        String url = "activepersonal";






        ClientResponse response = webResource
                    .path("api/alerts/")
                    .queryParam("filter", ""+url)                       
                    .header("Authorization", "Basic "+encode(user, pwd))
                    .header("x-api-version", "1")       
                    .accept("Application/json")
                    .get(ClientResponse.class);


        if (response.getStatus() != 200) {             

        }else{
            restConnector.LOGGER.info("REST connection STARTED.");
        }


        String output = response.getEntity(String.class);       



        ObjectMapper mapper = new ObjectMapper();           
         mapper.setPropertyNamingStrategy(new MyNameStrategy());

         try {
         List<Alert> alert = mapper.readValue(output, new TypeReference<List<Alert>>(){});



         } catch (JsonGenerationException e) {

                e.printStackTrace();

            } catch (JsonMappingException e) {

                e.printStackTrace();

            } catch (IOException e) {

                e.printStackTrace();

            }

      } catch (Exception e) {

        e.printStackTrace();            

      }


}

public void close() {

}
这是我的警觉课

@JsonIgnoreProperties(ignoreUnknown = true)
@JsonInclude(Include.NON_EMPTY)
public class Alert {

    private int pasID;
    private String status;
    private boolean shared;
    private String header;
    private String desc;

    public int getPasID() {
        return pasID;
    }

    public void setPasID(int pasID) {
        this.pasID = pasID;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }
    public boolean isShared() {
        return shared;
    }

    public void setShared(boolean shared) {
        this.shared = shared;
    }

    public String getHeader() {
        return header;
    }
    public void setHeader(String header) {
        this.header = header;
    }
    public String getDesc() {
        return desc;
    }
    public void setDesc(String desc) {
        this.desc = desc;
    }

    @Override
    public String toString() {

        StringBuilder sb = new StringBuilder();
        sb.append("\n***** Alert Details *****\n");
        sb.append("PasID="+getPasID()+"\n");
        sb.append("Status="+getStatus()+"\n");
        sb.append("Shared="+isShared()+"\n");
        sb.append("Header="+getHeader()+"\n");
        sb.append("Description="+getDesc()+"\n");
        sb.append("*****************************");

        return sb.toString();

    }

    public String getComponentAt(int i) {

        return toString();
    }

}
我有点不知所措,已经在这里呆了几天了,所以非常感谢大家的帮助。提前谢谢你的帮助

编辑:稍微格式化代码并删除NullPointerException,因为它不再发生。

如注释中所述:


Me:在您的第一段代码中,您有这样一个
尝试{List alert..
,但是您对新声明的警报
List
完全不做任何操作。数据应该从这里来吗

OP:我的印象是,这段代码就是将JSON数组推送到
Alert.class
的代码。我有什么遗漏吗

Me:是什么让你这么认为的?它所做的只是读取json,而
警报。class
参数是class-type参数,因此映射程序知道在创建
警报
对象时,结果应该映射到
警报
属性。这就是
列表
的可能方式,因为se传递
警报。class
List
中描述
T
List
是从读取中返回的内容,但您必须确定如何实际处理该列表。而目前,您对其完全不做任何处理

你也许想改变一下课程

现在,这绝不是一个好的设计,只是一个如何让它工作的示例。我会花一些时间坐下来思考一下您希望如何充分利用
restConnector

也就是说,您可以在
restConnector
类中拥有一个
列表警报;
类成员,并拥有一个getter

public class restConnector {

    private List<Alert> alerts;
  
    public List<Alert> getAlerts() {
        return alerts;
    }
    ...
}
现在,类成员被分配了一个值。因此,在
应用程序中,您可以执行如下操作

public class Application {

    List<Alert> alerts;
    restConnector connect;

    public Application() {
        initComponents();
    }

    private void initComponents() {
        connector = restConnector.getInstance();
        connector.init();
        alerts = connector.getAlerts();
        refreshData();          
    }   

    private void refreshData() {
        StringBuilder sb = new StringBuilder();
        for (Alert alert : alerts) {
            sb.append(alert.toString()).append("\n");
        }
        System.out.println("appalertList: "+ sb.toString());
    }     
}
公共类应用程序{
列出警报;
重新连接连接器;
公共应用程序(){
初始化组件();
}
私有组件(){
connector=restConnector.getInstance();
connector.init();
警报=connector.getAlerts();
刷新数据();
}   
私有数据(){
StringBuilder sb=新的StringBuilder();
用于(警报:警报){
sb.append(alert.toString()).append(“\n”);
}
System.out.println(“appalertList:+sb.toString());
}     
}
现在您可以访问列表中的
警报

但让我重申:这是一个可怕的设计。对于其中一个,您将
init
方法限制为一个调用,在该调用中,它只能获得一个且只有一个资源。如果rest服务需要访问另一个资源,该怎么办?您已将请求设置为一成不变,因此无法执行


花些时间考虑一些好的OOP设计,在这些设计中,类可以用于不同的场景。

如果您可以提供NullPointerException的跟踪,并让我们知道NullPointerException发生在代码的哪一行,可能会有所帮助。这是一个控制台打印:private void refreshData(){System.out.println(“appalertList:+alerts.getComponentAt(0));}当我尝试使用System.out.println(“appalertList:+alerts.getHeader())打印它时,它会给我一个输入:“appalertList:null appalertList:null”JSON数组中有两个项在您的第一段代码中,您有这个
try{List alert..
,但是您对新声明的
alert
列表完全不做任何操作。数据应该来自哪里?除此之外,我们还缺少太多的片段来帮助您调试。请花些时间编辑您的文章
try {
    List<Alert> alert = mapper.readValue...
try {
    alerts = mapper.readValue
public class Application {

    List<Alert> alerts;
    restConnector connect;

    public Application() {
        initComponents();
    }

    private void initComponents() {
        connector = restConnector.getInstance();
        connector.init();
        alerts = connector.getAlerts();
        refreshData();          
    }   

    private void refreshData() {
        StringBuilder sb = new StringBuilder();
        for (Alert alert : alerts) {
            sb.append(alert.toString()).append("\n");
        }
        System.out.println("appalertList: "+ sb.toString());
    }     
}