从Java对象到JsonObject,嵌套类的问题

时间:2019-05-08 12:48:03

标签: java json org.json

我正在研究RESTful API项目,并且正在使用JAVA完成端点的创建,因为我正在工作的环境是IBM Domino数据库。我正在使用org.json jar创建对象并提供所有响应,但是现在我将修改项目,直接与Java类一起使用,因为它变得越来越大...顺便说一下,我在嵌套方面遇到了问题Java对象。

基本上,我在另一个设置了所有必填字段的类中实例化了LabelValue,Content和ResultsBlock类,并生成一个JSONObject调用其构造函数以及新对象。当我这样做时,我有一个Null指针异常,因此系统不提供任何响应。 我认为问题出在嵌套Content对象的类Resultblock中。但是我不知道该如何处理这种情况。你能帮助我吗? 当我使用属性为通用数据类型的简单类时,当我创建Content类型的ArrayList时,我没问题,一切都很好。

提前谢谢!

p.s。我无法使用gson库,因为它会在IBM Domino服务器上造成Java策略问题。

public class LabelValue implements java.io.Serializable{
private String label;
private String value;

public void setLabel(String label) {
    this.label = label;
}

public void setValue(String value) {
    this.value = value;
};
}

public class Content implements java.io.Serializable{
private String title;
private String description;
private ArrayList <LabelValue> totals;


public void setTotals(ArrayList<LabelValue> totals) {
    this.totals = totals;
}

public void setTitle(String title) {
    this.title = title;
}

public void setDescription(String description) {
    this.description = description;
}}

public class ResultsBlock implements java.io.Serializable{
private String type;
private Content content;

public void setType(String type) {
    this.type = type;
}

public void setContent(Content content) {
    this.content = content;
}}

in the main  :
{
Content content = new Content();
content.setTitle("title");
content.setDescription("description");
content.setTotals(label);

ResultsBlock result = new ResultsBlock ();
result.setContent(content);
result.setType("result");

return new JSONObject(result);}

这是blockResult类的预期输出:

"blocks":
{
  "type": "result",
  "content": {
    "title": "title",
    "description": "description",
    "totals": [
      {
        "label": "label",
        "value": value
      }
    ]
 }
  }

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的需求,建议您在无法使用GSON的情况下使用Jackson

我试图用您提供的代码进行测试,然后将所有get方法添加到POJO类中,然后实现了以下示例:

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class MainClass {

    public static void main(String[] args) throws JsonProcessingException {     

        Content content = new Content();
        content.setTitle("title");
        content.setDescription("description");

        ResultsBlock result = new ResultsBlock ();
        result.setContent(content);
        result.setType("result");

        //  JSONObject(result);
        ObjectMapper mapper = new ObjectMapper(); 

        String jsonString = mapper.writeValueAsString(result);

        System.out.println(jsonString);
    }


}

它打印出以下内容:

{
    "type": "result",
    "content": {
        "title": "title",
        "description": "description",
        "totals": null
    }
}

现在,您可以根据需要访问JSON。 当然,我并没有考虑所有字段的简单性。

希望这会有所帮助。