如何解决使用 Jackson 时出现 NULL 指针错误 1.x
How to solve NULL pointer error when using Jackson 1.x
我在请求数据的地方使用 API。对于一个请求,当我尝试将值设置为 int 时收到 NULL 指针异常。
public class Player implements Serializable {
...
...
...
...
@JsonProperty("offsides")
private Integer offsides;
...
...
@JsonProperty("offsides")
public Integer getOffsides() {
return offsides;
}
@JsonProperty("offsides")
public void setOffsides(Integer offsides) {
this.offsides = offsides;
}
...
public class Fixtures {
private final static long serialVersionUID = 2571183788260356219L;
public static void main(String args[]) throws Exception {
ObjectMapper mapper = new ObjectMapper();
...
...
...
FixtureJSONMapp fixturesFixtures = mapper.readValue(fixturesFile, FixtureJSONMapp.class);
List<String> insertStatus = FixturesFixturesInsert.insertAllFixtures(fixturesFixtures,
statsNumb, playersNumb, eventsNumb, lineupsNumb);
}
}
...
public class FixturesFixturesInsert {
public static List<String> insertAllFixtures(FixtureJSONMapp fixturesFixtures, int statsNumb, int playersNumb, int eventsNumb, int lineupsNumb) throws Exception {
try {
Connection con = dbConnector.ConnectToDB();
PreparedStatement pstmtFixtures = con.prepareStatement(".....");
for(int i = 0; i < fixturesFixtures.getApi().getFixtures().size(); i++) {
...
...
...
...
int offsides = fixturesFixtures.getApi().getFixtures().get(i).getPlayers().get(j).getOffsides();
...
}
}
这是因为“int越位”,在这种情况下我得到了一个空指针异常。我可以解决
int offsides = (fixtures....getOffsides() != null ? getOffsides() : 0);
但我想我应该可以使用 mapper.getSerializationConfig().setSerializationInclusion(Inclusion.NON_NULL);或类似的东西,但我无法让它工作。我想将此设置设置得更全局一些,因为我将不得不在很多地方这样做。
如果我收到的 JSON 字符串中的值为 NULL,我想将值设置为 0。这可能吗?
如主题中所述,我使用 Jackson 1.x (org.codehaus.jackson)
首先确保 setSerializationInclusion(...)
应用于传入数据。我不这么认为,它对你即将发送的数据生效。
注意:
- 即使它有效,您也在尝试访问
null
并将其分配给原语。
NullPointerException
表示您正在对 null
对象调用 getOffsides()
。即 null.getOffsides()
- 如果您至少使用 Java 8,则可以使用
Optional.ofNullable
将 int offsides
设置为 0
,只要它是 null
我在请求数据的地方使用 API。对于一个请求,当我尝试将值设置为 int 时收到 NULL 指针异常。
public class Player implements Serializable {
...
...
...
...
@JsonProperty("offsides")
private Integer offsides;
...
...
@JsonProperty("offsides")
public Integer getOffsides() {
return offsides;
}
@JsonProperty("offsides")
public void setOffsides(Integer offsides) {
this.offsides = offsides;
}
...
public class Fixtures {
private final static long serialVersionUID = 2571183788260356219L;
public static void main(String args[]) throws Exception {
ObjectMapper mapper = new ObjectMapper();
...
...
...
FixtureJSONMapp fixturesFixtures = mapper.readValue(fixturesFile, FixtureJSONMapp.class);
List<String> insertStatus = FixturesFixturesInsert.insertAllFixtures(fixturesFixtures,
statsNumb, playersNumb, eventsNumb, lineupsNumb);
}
}
...
public class FixturesFixturesInsert {
public static List<String> insertAllFixtures(FixtureJSONMapp fixturesFixtures, int statsNumb, int playersNumb, int eventsNumb, int lineupsNumb) throws Exception {
try {
Connection con = dbConnector.ConnectToDB();
PreparedStatement pstmtFixtures = con.prepareStatement(".....");
for(int i = 0; i < fixturesFixtures.getApi().getFixtures().size(); i++) {
...
...
...
...
int offsides = fixturesFixtures.getApi().getFixtures().get(i).getPlayers().get(j).getOffsides();
...
}
}
这是因为“int越位”,在这种情况下我得到了一个空指针异常。我可以解决 int offsides = (fixtures....getOffsides() != null ? getOffsides() : 0); 但我想我应该可以使用 mapper.getSerializationConfig().setSerializationInclusion(Inclusion.NON_NULL);或类似的东西,但我无法让它工作。我想将此设置设置得更全局一些,因为我将不得不在很多地方这样做。
如果我收到的 JSON 字符串中的值为 NULL,我想将值设置为 0。这可能吗? 如主题中所述,我使用 Jackson 1.x (org.codehaus.jackson)
首先确保 setSerializationInclusion(...)
应用于传入数据。我不这么认为,它对你即将发送的数据生效。
注意:
- 即使它有效,您也在尝试访问
null
并将其分配给原语。 NullPointerException
表示您正在对null
对象调用getOffsides()
。即null.getOffsides()
- 如果您至少使用 Java 8,则可以使用
Optional.ofNullable
将int offsides
设置为0
,只要它是null