2015-01-22 2 views
-3

У меня есть POJO и Im, пытающиеся исключить пустые поля, используя аннотацию Include.NOT_EMPTY следующим образом.JSON Jackson не игнорирует нулевые поля

Обновлены Полный код

@JsonInclude(JsonInclude.Include.NON_EMPTY) 
public class Items { 

    /** 
* 
*/ 
    @JsonProperty("items") 
    private List<Item> items = new ArrayList<Item>(); 
    private Map<String, Object> additionalProperties = 
      new HashMap<String, Object>(); 

    /** 
    * 
    * @return 
    *   The items 
    */ 
    @JsonProperty("items") 
    public List<item> getItems() { 
     return items; 
    } 

    /** 
    * 
    * @param items 
    *   The items 
    */ 
    @JsonProperty("items") 
    public void setitems(List<Item> items) { 
     this.items = items; 
    } 

    @JsonAnyGetter 
    @JsonUnwrapped 
    public Map<String, Object> getAdditionalProperties() { 
     return this.additionalProperties; 
    } 

    @JsonAnySetter 
    public void setAdditionalProperty(String name, Object value) { 
     this.additionalProperties.put(name, value); 
    } 
    } 

Однако, когда я распечатать JSON, я получаю ответ следующим образом.

{ "items": [ 
      {...}], 

     "additionalProperties": { } // I expect this to be removed. 
    } 

Любая идея, что я делаю неправильно здесь? Я использую Jackson-core 2.1.1, если это имеет значение.

+1

Ваш код отлично подходит для меня. Если я создаю 'new Items()' и сериализую это напрямую, JSON сгенерирован '{}'. –

+0

@JarrodRoberson Я уже проверил связанный вопрос, и он НЕ помогает. – KodeSeeker

+1

Пожалуйста, дайте нам полный пример. –

ответ

2

Вы должны добавить его на уровне класса @JsonInclude(Include.NON_EMPTY)

Следующий фрагмент кода работает отлично для меня

public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException { 
    String [] characteristics = new String[]{}; 
    Employee emp = new Employee("John", "20", "Male", characteristics); 
    ObjectMapper mapper = new ObjectMapper(); 
    mapper.setSerializationInclusion(JsonSerialize.Inclusion.NON_EMPTY); 
    mapper.writeValue(System.out, emp); 
} 
class Employee { 
    String name; 
    String age; 
    String gender; 
    String [] characteristics; 
    //setters and getters 
    } 

Выход: {"name":"John","age":"20","gender":"Male"}

+0

@KodeSeeker Используйте @JsonInclude (Include.NON_NULL) вместо @JsonInclude (JsonInclude.Include.NON_EMPTY) – Vivek

+0

@VVK , NON_NULL является подмножеством NON_EMPTY http://jackson.codehaus.org/1.9.9/javadoc/org/codehaus/jackson/map/annotate/JsonSerialize.Inclusion.html#NON_EMPTY – KodeSeeker

+0

@KodeSeeker yep ... Я использовал 'NON_EMPTY 'потому что у меня был пустой массив – shikjohari

0

Вы можете изменить свой код, как additionalProperties сеттер и свойство, как показано ниже, и используйте @JsonInclude (Include.NON_NULL) на уровне класса

private Map<String, Object> additionalProperties = null; 

public void setAdditionalProperty(String name, Object value) { 
    if(additionalProperties == null) 
     additionalProperties = new HashMap<String, Object>(); 
    this.additionalProperties.put(name, value); 
} 
+0

Не работает. – KodeSeeker

Смежные вопросы