简体   繁体   English

Gson转换返回空Java对象

[英]Gson conversion returning null java object

I am trying to convert json string in java bean using Gson but it is returnig null value. 我正在尝试使用Gson在Java bean中转换json字符串,但它是returnig null值。

public static void convert(String args) {
    String json =
                "{"body":{"response":{"total":"294","num":"294","filelist":[{"id":"56712","camname":"Camera1","camid":"514","start":"2016-07-08 12:00:38","end":"2016-07-08 12:03:00","stream":"3","recReason":"Activity","filename":"fs/514/2016-07-08/AD_1_1_3_2016_07_08_12_00_57.mrv","snapshot":"fs-1/514/2016-07-08/AD_1_1_3_2016_07_08_12_00_57.jpg","nvrip":"192.168.0.200:8095"},{"id":"56708","camname":"Camera1","camid":"514","start":"2016-07-08 11:58:14","end":"2016-07-08 12:00:36","stream":"3","recReason":"Activity","filename":"fs-1/514/2016-07-08/AD_1_1_3_2016_07_08_11_58_33.mrv","snapshot":"fs-1/514/2016-07-08/AD_1_1_3_2016_07_08_11_58_33.jpg","nvrip":"192.168.0.200:8095"},{"id":"56705","camname":"Camera1","camid":"514","start":"2016-07-08 11:55:49","end":"2016-07-08 11:58:11","stream":"3","recReason":"Activity","filename":"fs-1/514/2016-07-08/AD_1_1_3_2016_07_08_11_56_08.mrv","snapshot":"fs-1/514/2016-07-08/AD_1_1_3_2016_07_08_11_56_08.jpg","nvrip":"192.168.0.200:8095"},{"id":"56702","camname":"Camera1","camid":"514","start":"2016-07-08 11:53:25","end":"2016-07-08 11:55:47","stream":"3","recReason":"Activity","filename":"fs-1/514/2016-07-08/AD_1_1_3_2016_07_08_11_53_44.mrv","snapshot":"fs-/514/2016-07-08/AD_1_1_3_2016_07_08_11_53_44.jpg","nvrip":"192.168.0.200:8095"},{"id":"56699","camname":"Camera1","camid":"514","start":"2016-07-08 11:51:00","end":"2016-07-08 11:53:22","stream":"3","recReason":"Activity","filename":"fs/514/2016-07-08/AD_1_1_3_2016_07_08_11_51_19.mrv","snapshot":"fs-/514/2016-07-08/AD_1_1_3_2016_07_08_11_51_19.jpg","nvrip":"192.168.0.200:8095"}],"status":"OK"}}}";

    // Now do the magic.
    RecordingListResponseDTO data = new Gson().fromJson(json, RecordingListResponseDTO .class);

    // Show it.
    System.out.println("converted data :"+data);
}

My Bean Class is following. 我的Bean类正在关注。 RecordingListResponseDTO RecordingListResponseDTO

   public class RecordingListResponseDTO implements Serializable {
    private String status;
    private int total;
    private int num;
    List<FileListDTO> fileList;

    public RecordingListResponseDTO(){

    }
    public RecordingListResponseDTO(String status, int total, int num, List<FileListDTO> fileList) {
        this.status = status;
        this.total = total;
        this.num = num;
        this.fileList = fileList;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public int getTotal() {
        return total;
    }

    public void setTotal(int total) {
        this.total = total;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public List<FileListDTO> getFileList() {
        return fileList;
    }

    public void setFileList(List<FileListDTO> fileList) {
        this.fileList = fileList;
    }

    @Override
    public String toString() {
        return "RecordingListResponseDTO{" +
                "status='" + status + '\'' +
                ", total=" + total +
                ", num=" + num +

                ", fileList=" + fileList +
                '}';
    }}

FileListDTO.java FileListDTO.java

public class FileListDTO {
private int id;
private String camname;
private int camid;
private Date start;
private Date end;
private int stream;
private String recReason;
private String filename;
private String snapshot;
private String nvrip;

public FileListDTO(int id, String camname, Date start, int camid, Date end, int stream, String recReason, String filename, String snapshot, String nvrip) {
    this.id = id;
    this.camname = camname;
    this.start = start;
    this.camid = camid;
    this.end = end;
    this.stream = stream;
    this.recReason = recReason;
    this.filename = filename;
    this.snapshot = snapshot;
    this.nvrip = nvrip;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getCamname() {
    return camname;
}

public void setCamname(String camname) {
    this.camname = camname;
}

public int getCamid() {
    return camid;
}

public void setCamid(int camid) {
    this.camid = camid;
}

public Date getStart() {
    return start;
}

public void setStart(Date start) {
    this.start = start;
}

public Date getEnd() {
    return end;
}

public void setEnd(Date end) {
    this.end = end;
}

public int getStream() {
    return stream;
}

public void setStream(int stream) {
    this.stream = stream;
}

public String getRecReason() {
    return recReason;
}

public void setRecReason(String recReason) {
    this.recReason = recReason;
}

public String getFilename() {
    return filename;
}

public void setFilename(String filename) {
    this.filename = filename;
}

public String getSnapshot() {
    return snapshot;
}

public void setSnapshot(String snapshot) {
    this.snapshot = snapshot;
}

public String getNvrip() {
    return nvrip;
}

public void setNvrip(String nvrip) {
    this.nvrip = nvrip;
}

@Override
public String toString() {
    return "FileListDTO{" +
            "id=" + id +
            ", camname='" + camname + '\'' +
            ", camid=" + camid +
            ", start=" + start +
            ", end=" + end +
            ", stream=" + stream +
            ", recReason='" + recReason + '\'' +
            ", filename='" + filename + '\'' +
            ", snapshot='" + snapshot + '\'' +
            ", nvrip='" + nvrip + '\'' +
            '}';
}}

I am getting null value after converting Json string to Java object. 将Json字符串转换为Java对象后,我得到空值。 what I am doing wrong please suggest me. 我做错了,建议我。 Thank in advance. 预先感谢。

Prerequisites: 先决条件:

Following JSON has been used: 使用了以下JSON:

{
   "body":{
      "response":{
         "total":294,
         "num":294,
         "filelist":[
            {
               "id":56712,
               "camname":"Camera1",
               "camid":514,
               "start":"2016-07-08 12:00:38",
               "end":"2016-07-08 12:03:00",
               "stream":3,
               "recReason":"Activity",
               "filename":"fs/514/2016-07-08/AD_1_1_3_2016_07_08_12_00_57.mrv",
               "snapshot":"fs-1/514/2016-07-08/AD_1_1_3_2016_07_08_12_00_57.jpg",
               "nvrip":"192.168.0.200:8095"
            },
            {
               "id":56708,
               "camname":"Camera1",
               "camid":514,
               "start":"2016-07-08 11:58:14",
               "end":"2016-07-08 12:00:36",
               "stream":3,
               "recReason":"Activity",
               "filename":"fs-1/514/2016-07-08/AD_1_1_3_2016_07_08_11_58_33.mrv",
               "snapshot":"fs-1/514/2016-07-08/AD_1_1_3_2016_07_08_11_58_33.jpg",
               "nvrip":"192.168.0.200:8095"
            },
            {
               "id":56705,
               "camname":"Camera1",
               "camid":514,
               "start":"2016-07-08 11:55:49",
               "end":"2016-07-08 11:58:11",
               "stream":3,
               "recReason":"Activity",
               "filename":"fs-1/514/2016-07-08/AD_1_1_3_2016_07_08_11_56_08.mrv",
               "snapshot":"fs-1/514/2016-07-08/AD_1_1_3_2016_07_08_11_56_08.jpg",
               "nvrip":"192.168.0.200:8095"
            },
            {
               "id":56702,
               "camname":"Camera1",
               "camid":514,
               "start":"2016-07-08 11:53:25",
               "end":"2016-07-08 11:55:47",
               "stream":3,
               "recReason":"Activity",
               "filename":"fs-1/514/2016-07-08/AD_1_1_3_2016_07_08_11_53_44.mrv",
               "snapshot":"fs-/514/2016-07-08/AD_1_1_3_2016_07_08_11_53_44.jpg",
               "nvrip":"192.168.0.200:8095"
            },
            {
               "id":56699,
               "camname":"Camera1",
               "camid":514,
               "start":"2016-07-08 11:51:00",
               "end":"2016-07-08 11:53:22",
               "stream":3,
               "recReason":"Activity",
               "filename":"fs/514/2016-07-08/AD_1_1_3_2016_07_08_11_51_19.mrv",
               "snapshot":"fs-/514/2016-07-08/AD_1_1_3_2016_07_08_11_51_19.jpg",
               "nvrip":"192.168.0.200:8095"
            }
         ],
         "status":"OK"
      }
   }
}

Step 1: 第1步:

Modify the declaration of private List<FileListDTO> fileList in RecordingListResponseDTO.java as follows: 修改RecordingListResponseDTO.javaprivate List<FileListDTO> fileList的声明,如下所示:

@SerializedName("filelist")
private List<FileListDTO> fileList

Step 2: 第2步:

Define following class MyDateTypeAdapter.java : 定义以下类MyDateTypeAdapter.java

import java.lang.reflect.Type;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;

public class MyDateTypeAdapter implements JsonSerializer<Date>, JsonDeserializer<Date> {

    private DateFormat dateFormat;

    public MyDateTypeAdapter() {
        dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US); 
        dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); 
    }

    @Override
    public synchronized JsonElement serialize(Date date, Type type, JsonSerializationContext jsonSerializationContext) {
        return new JsonPrimitive(dateFormat.format(date));
    }

    @Override
    public synchronized Date deserialize(JsonElement jsonElement, Type type,
            JsonDeserializationContext jsonDeserializationContext) {
        try {
            return dateFormat.parse(jsonElement.getAsString());
        } catch (ParseException e) {
            throw new JsonParseException(e);
        }
    }

}

Step 3: 第三步:

Modify the method convert(String args) as follows: 修改方法convert(String args)如下:

public static void convert(String args) {
        JsonParser parser = new JsonParser();
        String json = parser.parse(args)
                            .getAsJsonObject()
                            .getAsJsonObject("body")
                            .getAsJsonObject("response")
                            .toString();

        // Now do the magic.
        RecordingListResponseDTO data = new GsonBuilder()
                 .registerTypeAdapter(Date.class, new MyDateTypeAdapter())
                .create().fromJson(json, RecordingListResponseDTO.class);
        // Show it.
        System.out.println("converted data :"+data);
}

For testing purpose, you may try storing the JSON in a file ie D:/test.json and call the method by: 为了进行测试,您可以尝试将JSON存储在文件D:/test.json并通过以下方式调用该方法:

String json = new String(Files.readAllBytes(Paths.get("D:/test.json")));
convert(json); 

something you need to change the models class like, 您需要更改模型类,例如,

Initially in your json response data contains "body" tag that's represents to object, initially you need to create the class for object tag,then all data contains inside your "body" tag, so parse all data inside from body data, 最初,在您的json响应数据中包含代表对象的“ body”标签,最初您需要为object标记创建类,然后所有数据都包含在“ body”标签内,因此从body数据中解析所有数据,

may help this code, 可能有助于这段代码,

public class RecordingListResponseDTO implements Serializable {
  Recordinglist body;

  public class Recordinglist(){
    Recordresponse response;

     public class Recordresponse(){
       String total;

       public int getTotal() {
          return total;
       }

       public void setTotal(int total) {
          this.total = total;
       }
    }
  }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM