杰克逊前

开始使用Spring 5和Spring Boot 2,通过学习的春天课程:

>>看看这个课程

1.概述

这个快速教程将介绍如何设置在序列化时忽略空字段一个java类。

如果我们想深入挖掘并了解杰克逊2的其他酷炫之处,我们可以直接去主要的Jackson教程

进一步阅读:

杰克逊-改变名称的领域

Jackson——更改字段的名称以符合特定的JSON格式。

Jackson -决定哪些字段被序列化/反序列化

如何控制哪些字段被Jackson序列化/反序列化,哪些字段被忽略。

2.忽略类上的空字段

Jackson允许我们在类级别上控制这种行为:

@JsonInclude(Include.NON_NULL) public class MyDto{…}

或者在字段级别上有更多的粒度:

public class MyDto {@JsonInclude(Include.NON_NULL) private String stringValue;私人int intValue;//标准的getter和setter}

现在我们应该可以进行测试了值确实不是最终JSON输出的一部分:

@Test public void givennullignoredonclass_whenwritingobjectwithnullfield_thenignored () throws JsonProcessingException {ObjectMapper mapper = new ObjectMapper();MyDto dtoObject = new MyDto();String dtoAsString = mapper.writeValueAsString(dtoObject);为了(dtoAsString containsString (intValue "));为了(dtoAsString,而不是(containsString(“stringValue”)));}

3.全局忽略空字段

杰克逊也允许我们这样做控件上全局配置此行为objectmap:

mapper.setSerializationInclusion (Include.NON_NULL);

现在任何任何通过这个映射器序列化的类中的字段都将被忽略:

@Test public void givennullignoredglobally_whenwritingobjectwithnullfield_thenignored () throws JsonProcessingException {ObjectMapper mapper = new ObjectMapper();mapper.setSerializationInclusion (Include.NON_NULL);MyDto dtoObject = new MyDto();String dtoAsString = mapper.writeValueAsString(dtoObject);为了(dtoAsString containsString (intValue "));为了(dtoAsString containsString (booleanValue "));为了(dtoAsString,而不是(containsString(“stringValue”)));}

4.结论

忽略fields是如此常见的Jackson配置,因为通常情况下,我们需要更好地控制JSON输出。本文演示了如何为类实现这一点。然而,还有更高级的用例,例如序列化Map时忽略空值

控件中可以找到所有这些示例和代码片段的实现Github项目

杰克逊底部

开始使用Spring 5和Spring Boot 2,通过学习的春天课程:

>>看看这个课程
4评论
最古老的
最新的
内联反馈
查看所有评论
对这篇文章的评论关闭!