[英]Jackson Displaying fields in Json response
自最近两天以来,我一直在努力解决一个问题。 我有一个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方法。 我只想显示atcPercentage
, ruleOn
和ruleOff
除非它不为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
值,则此解决方案可能会有一些缺点。
也可以看看:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.