自从最近两天以来,我一直在努力解决一个问题。我有一个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方法。我只想显示atcPercentage
,ruleOn
和ruleOff
。我该怎么做?我希望这种解释有助于理解我的问题。我已经尝试过0
,但似乎没有用。我的理解是,如果我在课程开始时定义了NON_NULL
,那应该适用于所有字段。如果我错了,请纠正我。
答案 0 :(得分:0)
您可以编写自己的过滤器并按以下方式使用它:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Trip Buddy | Your free online travel guide</title>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="style.css">
<link rel="shortcut icon" type="image/png" href="favicon.ico">
</head>
<body>
<header>
<div class="main">
<div class="logo">
<a href="acceuil.html"><img src="2.png"></a>
</div>
<ul>
<li class="active"><a href="#"><i class="fas fa-home"></i>Accueil</a></li>
<li><a href="#"><i class="fas fa-city"></i>Villes dispo</a>
<ul>
<li><a href="#">Marrakech</a></li>
<li><a href="#">Rabat</a></li>
<li><a href="#">Tanger</a></li>
<li><a href="#">Essaouira</a></li>
</ul>
</li>
<li><a href="#"><i class="fas fa-hand-holding"></i>Services</a></li>
<li><a href="#"><i class="fas fa-user-alt"></i>Contact</a></li>
</ul>
</div>
<div class="login">
<ul>
<li><a href="#">S'inscrire</a></li>
<li><a href="#">Se connecter</a></li>
</ul>
</div>
<div class="title">
<img src="2.png">
<p>Trip Buddy est ton premier accompagnant guide en ligne. Rejoignez notre nombreuse communauté et télecharger l'application sur toutes les platformes GRATUITEMENT!</p>
</div>
<div class="button">
<a href="#" class="btn"><i class="far fa-play-circle"></i>Regarder video</a>
<a href="#" class="btn"><i class="far fa-question-circle"></i>Aide</a>
</div>
</header>
<footer>
<div class="footer">
<ul>
<li><a href="#"><i class="fab fa-facebook"></i></a></li>
<li><a href="#"><i class="fab fa-twitter-square"></i></a></li>
<li><a href="#"><i class="fab fa-instagram"></i></a></li>
<li><a href="#"><i class="fab fa-snapchat-square"></i></a></li>
</ul>
<h5>
©Khalil 2019
</h5>
</div>
</footer>
</body>
</html>
打印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
}
值,则此解决方案可能会有一些缺点。
另请参阅: