如何解决使用 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(...) 应用于传入数据。我不这么认为,它对你即将发送的数据生效。

注意:

  1. 即使它有效,您也在尝试访问 null 并将其分配给原语。
  2. NullPointerException 表示您正在对 null 对象调用 getOffsides()。即 null.getOffsides()
  3. 如果您至少使用 Java 8,则可以使用 Optional.ofNullableint offsides 设置为 0,只要它是 null