2015-11-02 70 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