Jackson在Json响应中显示字段

时间:2019-05-05 16:50:07

标签: java json serialization jackson json-serialization

自从最近两天以来,我一直在努力解决一个问题。我有一个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方法。我只想显示atcPercentageruleOnruleOff。我该怎么做?我希望这种解释有助于理解我的问题。我已经尝试过0,但似乎没有用。我的理解是,如果我在课程开始时定义了NON_NULL,那应该适用于所有字段。如果我错了,请纠正我。

1 个答案:

答案 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>
				&copy;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 } 值,则此解决方案可能会有一些缺点。

另请参阅: