繁体   English   中英

从 rest API 读取数据后的 Null 值

[英]Null values after reading data from rest API

Have similar problem to this but i couldnt work this out Getting null values when reading in JSON file in eclipse using java I'm having problem while reading data from this https://runsignup.com/Rest/races?format=json&country=US

Gson gson = new GsonBuilder().setPrettyPrinting().create();
        final String racesUri = "https://runsignup.com/Rest/races?format=json&country=US";
        HttpResponse<String> response = HttpClient
                .newBuilder()
                .proxy(ProxySelector.getDefault())
                .build()
                .send(Request.requestGet(racesUri), HttpResponse.BodyHandlers.ofString());
        RaceList races = gson.fromJson(response.body(), RaceList.class);
        System.out.println(response.body());
        System.out.println(races);

我只想得到“race_id”和“name” Race class 看起来像这样:

package stefanowicz.kacper.model;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Race {
    private long race_id;
    private String name;
}

响应体非常好,但是当我尝试将其转换为 RaceList object 时,如下所示:

package stefanowicz.kacper.model;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class RaceList {
    private List<Race> races;
}

每个 Race 的“race_id”等于 0,“name”为 null。

RaceList(races=[Race(race_id=0, name=null), Race(race_id=0, name=null), Race(race_id=0, name=null), Race(race_id=0, name=null), Race (race_id=0, name=null), Race(race_id=0, name=null), Race(race_id=0, name=null), Race(race_id=0, name=null), Race(race_id=0, name =null), Race(race_id=0, name=null), Race(race_id=0, name=null), Race(race_id=0, name=null), Race(race_id=0, name=null), Race( race_id=0, name=null), Race(race_id=0, name=null), Race(race_id=0, name=null), Race(race_id=0, name=null), Race(race_id=0, name= null), Race(race_id=0, name=null), Race(race_id=0, name=null), Race(race_id=0, name=null), Race(race_id=0, name=null), Race(race_id =0, name=null), Race(race_id=0, name=null), Race(race_id=0, name=null), Race(race_id=0, name=null), Race(race_id=0, name=null) ), Race(race_id=0, name=null), Race(race_id=0, name=null), Race(race_id=0, name=null), Race(race_id=0, name=null), Race(race_id= 0, name=null), Race(race_id=0, name=null), Race(race_id=0, name=null), Race(race_id=0, name=null), Race (race_id=0, name=null), Race(race_id=0, name=null), Race(race_id=0, name=null), Race(race_id=0, name=null), Race(race_id=0, name =null), Race(race_id=0, name=null), Race(race_id=0, name=null), Race(race_id=0, name=null), Race(race_id=0, name=null), Race( race_id=0, name=null), Race(race_id=0, name=null), Race(race_id=0, name=null), Race(race_id=0, name=null), Race(race_id=0, name=空),种族(race_id=0,名称=空)])

我认为你的课程应该是这样的:

public class RaceList {
    private List<Race> races;
}

public class Race {
    private RaceData race;
}

public class RaceData {
    private long race_id;
    private String name;
    /* ... */
}

如果races是保存RaceList object 的变量的名称,那么第一场比赛的名称应该以races.getRaces().get(0).getRace().getName()的形式访问。

谢谢大家,您的回答使我找到了最好的解决方案,我希望如此:

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class RaceList {
    private List<Map<String, Race>> races;
}

暂无
暂无

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

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