java – 使用JsonInclude批注忽略扩展类中的空值

Java 1.8,Jackson库2.1.5

我需要覆盖在json中序列化对象的行为.

我需要的是,如果值为null且员工是合作伙伴员工,则忽略序列化json响应中的bonus属性.但是,尝试下面的代码似乎没有按预期工作.

class Employee{
    private String bonus;
    public String getBonus(){return bonus;}
    public String setBonus(){this.bonus = bonus;}
}

class Partner extends Employee{
    @Override
    @JsonInclude(NON_NULL)
    public String getBonus(){return super.getBonus();}
}

有帮助吗?

最佳答案 如果你可以排除所有null属性,那么你可以在类上使用@JsonSerialize.以下测试使用Jackson 2.1.5成功运行:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import org.junit.Test;

public class SomeTest {
    public static class Employee {
        private String bonus;

        public String getBonus() {
            return bonus;
        }

        public void setBonus(String bonus) {
            this.bonus = bonus;
        }
    }

    @JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
    public static class Partner extends Employee {
        @Override
        public String getBonus() {
            return super.getBonus();
        }
    }

    @Test
    public void testSerialize() throws Exception {
        Employee employee = new Employee();
        Partner partner = new Partner();

        ObjectMapper objectMapper = new ObjectMapper();
        System.out.println("Employee: " + objectMapper.writeValueAsString(employee));
        System.out.println(" Partner: " + objectMapper.writeValueAsString(partner));
    }
}

输出:

Employee: {"bonus":null}
 Partner: {}
点赞