Jackson - 浅析@JsonInclude

@JsonInclude注解可用于指示何时可以对添加注解的属性进行序列化。通常会包含属性值,但是通过使用这个注解,我们可以基于属性值指定简单的排除规则。
这个注解可用于字段,方法或构造函数参数。它也可以在类上使用,这样对应的规则将应用于类的所有属性。
以下是@JsonInclude定义代码段:

@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.FIELD,
    ElementType.TYPE, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@JacksonAnnotation
public @interface JsonInclude
{
   public Include value() default Include.ALWAYS;//inclusion rules
   public Include content() default Include.ALWAYS;//rules on content (e.g. Map's elements)
   public Class<?> valueFilter() default Void.class;//used for values when Include.CUSTOM
   public Class<?> contentFilter() default Void.class;//used for contents values when Include.CUSTOM 
   
   public enum Include{
       ALWAYS,//always include property
       NON_NULL,//do not include property with null value
       NON_ABSENT,//no null values including no content null values like Optional, AtomicReference etc
       NON_EMPTY,//NON_NULL + NON_ABSENT + values like empty Collections/Map/arrays/String etc are excluded
       NON_DEFAULT,//no default values, e.g. no primitives with default values  
       CUSTOM,// a custom filter for exclusion specified by JsonInclude.valueFilter()
       USE_DEFAULTS//use defaults either from class level or ObjectMapper level
       ;
   }
}
例子
定义对象
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Employee {
 	private String name;
 	private String dept;
 	private String address;
}
Main方法
    public class ExampleMain {
        public static void main(String[] args) throws IOException {
            Employee employee = Employee.of("Trish", null, null);
            ObjectMapper om = new ObjectMapper();
            String jsonString = om.writeValueAsString(employee);
            System.out.println(jsonString);
        }
    }
结果
{"name":"Trish"}

如上所示,序列化期间不包含’dept’和’address’属性,因为我们为它们设置了null。

没有@JsonInclude

如果我们不使用@JsonIncludeEmployee类,那么输出将是:

{“ name”:“ Trish”,“ dept”:null,“ address”:null}
使用ObjectMapper#setDefaultPropertyInclusion()

此方法或ObjectMapper#setSerializationInclusion()可用于全局指定包含规则。例如,以下将产生与上面的示例相同的输出:

public class ExampleMain {
    public static void main(String[] args) throws IOException {
        Employee employee = Employee.of("Trish", null, null);
        ObjectMapper om = new ObjectMapper();
        om.setDefaultPropertyInclusion(JsonInclude.Include.NON_NULL);
        String jsonString = om.writeValueAsString(employee);
        System.out.println(jsonString);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值