改造无法使用gson转换器解析某些字段

时间:2018-10-19 08:03:57

标签: json null retrofit2

我正在尝试在Android中使用翻新以从服务器获取一些数据。一切正常,但作为响应,缺少一些字段。普通的JSON响应对我来说看起来不错,我认为该模型也很好。这些字段并不特殊-整数和字符串。我用http://www.jsonschema2pojo.org/创建了这个模型。

implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'

models / Bin.java

public class Bin {

@JsonProperty("id")
private Integer id;
@JsonProperty("firm_id")
private Integer firmId;
@JsonProperty("number")
private Integer number;
@JsonProperty("frequency")
private String frequency;
@JsonProperty("placed")
private String placed;
@JsonProperty("taken")
private String taken;
@JsonProperty("shredded")
private Object shredded;
@JsonProperty("collect_date")
private String collectDate;
@JsonProperty("created_at")
private String createdAt;
@JsonProperty("updated_at")
private String updatedAt;
@JsonProperty("url")
private String url;

@JsonProperty("id")
public Integer getId() {
    return id;
}

@JsonProperty("id")
public void setId(Integer id) {
    this.id = id;
}

@JsonProperty("firm_id")
public Integer getFirmId() {
    return firmId;
}

@JsonProperty("firm_id")
public void setFirmId(Integer firmId) {
    this.firmId = firmId;
}

@JsonProperty("number")
public Integer getNumber() {
    return number;
}

@JsonProperty("number")
public void setNumber(Integer number) {
    this.number = number;
}

@JsonProperty("frequency")
public String getFrequency() {
    return frequency;
}

@JsonProperty("frequency")
public void setFrequency(String frequency) {
    this.frequency = frequency;
}

@JsonProperty("placed")
public String getPlaced() {
    return placed;
}

@JsonProperty("placed")
public void setPlaced(String placed) {
    this.placed = placed;
}

@JsonProperty("taken")
public String getTaken() {
    return taken;
}

@JsonProperty("taken")
public void setTaken(String taken) {
    this.taken = taken;
}

@JsonProperty("shredded")
public Object getShredded() {
    return shredded;
}

@JsonProperty("shredded")
public void setShredded(Object shredded) {
    this.shredded = shredded;
}

@JsonProperty("collect_date")
public String getCollectDate() {
    return collectDate;
}

@JsonProperty("collect_date")
public void setCollectDate(String collectDate) {
    this.collectDate = collectDate;
}

@JsonProperty("created_at")
public String getCreatedAt() {
    return createdAt;
}

@JsonProperty("created_at")
public void setCreatedAt(String createdAt) {
    this.createdAt = createdAt;
}

@JsonProperty("updated_at")
public String getUpdatedAt() {
    return updatedAt;
}

@JsonProperty("updated_at")
public void setUpdatedAt(String updatedAt) {
    this.updatedAt = updatedAt;
}

@JsonProperty("url")
public String getUrl() {
    return url;
}

@JsonProperty("url")
public void setUrl(String url) {
    this.url = url;
}

}

改造界面:

@GET("bins.json")
Call<List<Bin>> getBins();

它返回:

[{"id":4,"firm_id":2,"number":3,"frequency":"daily","placed":"2018-10-17T00:00:00.000Z","taken":"2018-10-17T00:00:00.000Z","shredded":null,"collect_date":"2018-10-18T00:00:00.000Z","created_at":"2018-10-17T13:41:41.245Z","updated_at":"2018-10-17T13:41:41.245Z","url":"https://server/bins/4.json"},{"id":1,"firm_id":1,"number":1,"frequency":"weekly","placed":"2018-10-15T00:00:00.000Z","taken":"2018-10-17T00:00:00.000Z","shredded":null,"collect_date":"2018-10-24T00:00:00.000Z","created_at":"2018-10-15T12:27:32.294Z","updated_at":"2018-10-17T13:41:06.381Z","url":"https://server/bins/1.json"},{"id":2,"firm_id":1,"number":2,"frequency":"monthly","placed":"2018-10-17T00:00:00.000Z","taken":"2018-10-17T00:00:00.000Z","shredded":null,"collect_date":"2018-11-16T00:00:00.000Z","created_at":"2018-10-17T10:18:46.172Z","updated_at":"2018-10-17T10:18:46.172Z","url":"https://server/bins/2.json"}]

但是在response.body()中,缺少一些字段:

enter image description here

1 个答案:

答案 0 :(得分:1)

这很可能是因为在使用Gson反序列化改造时,您正在使用@JsonProperty批注。我相信@JsonProperty注解用于杰克逊库,对于Gson,正确的注解将是@SerializedName

因此,请尝试将每个@JsonProperty("name")替换为等效的@SerializedName("name"),然后正确填写您的缺失字段

编辑:在检查了您提供的网站之后,他们在“注释样式”部分下有一个“ Gson”选项,它将以正确的方式生成您的pojo:)