2015-11-02 46 views
4

的Java 1.8,杰克逊库2.1.5使用JsonInclude注释忽略空值的扩展类

我需要覆盖的目标是如何在JSON序列的行为。

我需要的是,如果值为空且员工为Partner员工,则忽略序列化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();} 
} 

任何帮助?

回答

2

如果你可以通过排除所有null属性,那么你可以在课上使用@JsonSerialize。下面的测试运行成功,我用杰克逊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: {} 
+0

我已经没有成功:( – geo

+0

您正在使用什么版本的杰克逊试过有你尝试过'objectMapper.setSerializationInclusion(Include.NON_NULL)'?这将排除所有'null'属性 –

+0

Jackson库2.1.5。我不能使用ObjectMapper,因为我不是端点 – geo