gpt4 book ai didi

java - Jackson 在 Json 响应中显示字段

转载 作者:太空宇宙 更新时间:2023-11-04 09:40:59 24 4
gpt4 key购买 nike

我遇到了一个问题,自过去两天以来我一直在努力解决这个问题。我有一个 Integer 对象和一个 Float 对象,如果它是 0,我不想在 JSON 响应中显示它们。我正在尝试使用 @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 方法。我想仅在 atcPercentageruleOnruleOff 不为 0 时显示。我该怎么做呢?我希望这个解释有助于理解我的问题。我已经尝试过 NON_NULL 但它似乎不起作用。我的理解是,如果我在类的开头定义 JsonInclude ,那么它应该适用于所有字段。如果我错了请纠正我。

最佳答案

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

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 值,则此解决方案可能存在一些缺点。

另请参阅:

关于java - Jackson 在 Json 响应中显示字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55994259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com