1

我被一个问题困住了,自最近两天以来我一直在努力解决这个问题。我有一个Integer对象和一个Float对象,如果它是,我不想在JSON响应中显示0。我试图用它来实现这一点,@JsonInclude(value=Include.NON_NULL)但它似乎不起作用。

有没有人有任何建议,可以解释我在这里做错了什么?

假设模型类是这样的:

@JsonInclude(value = Include.NON_NULL)
public class myClassInfo {

    String                originalQuery;
    String                normalizedQuery;
    Long                  id;
    Integer               performanceStatus;
    Float                 atcPercentage;
    Integer               ruleOn;
    Integer               ruleOff;
}

我有相应的getter和setter方法。我想显示atcPercentageruleOn并且ruleOff仅当它不是0。我该怎么做?我希望这个解释有助于理解我的问题。我已经尝试过NON_NULL了,它似乎不起作用。我的理解,如果我JsonInclude在课程的开头定义,那应该适用于所有领域。如果我错了,请纠正我。

4

1 回答 1

0

您可以编写自己的过滤器并按如下方式使用它:

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonApp {

    public static void main(String[] args) throws Exception {
        ClassInfo classInfo = new ClassInfo();
        classInfo.setId(0L);
        classInfo.setAtcPercentage(0F);
        classInfo.setPerformanceStatus(0);

        ObjectMapper mapper = new ObjectMapper();
        System.out.println(mapper.writeValueAsString(classInfo));
    }
}

@JsonInclude(value = JsonInclude.Include.CUSTOM, valueFilter = ZeroNumberFilter.class)
class ClassInfo {

    private Long id;
    private Integer performanceStatus;
    private Float atcPercentage;

    // getters, setters
}

class ZeroNumberFilter {

    @Override
    public boolean equals(final Object obj) {
        if (obj instanceof Number) {
            final Number number = (Number) obj;
            return Double.compare(number.doubleValue(), 0) == 0;
        }

        return false;
    }
}

打印{}- 空对象。当我们将所有值更改为 时1,它会打印:

{"id":1,"performanceStatus":1,"atcPercentage":1.0}

Include.NON_NULL仅过滤具有null值的属性。您可以使用Include.NON_DEFAULT,但在这种情况下,您应该更改POJO并声明所有字段的默认值:

@JsonInclude(value = JsonInclude.Include.NON_DEFAULT)
class ClassInfo {

    private Long id = 0L;
    private Integer performanceStatus = 0;
    private Float atcPercentage = 0F;

    // getters, setters
}

但是,如果您的业务逻辑依赖于null某处的值,则此解决方案可能会有一些缺点。

也可以看看:

于 2019-05-05T21:11:21.500 回答