2016-08-08 14 views
8

Próbuję zwrócić tylko właściwości, które mają wartości, ale zwracane są również wartości zerowe.Jak zignorować "puste" lub puste właściwości w jsonie, globalnie, używając konfiguracji Spring

Wiem, że istnieje adnotacja, która to robi (@JsonInclude(Include.NON_NULL)), ale potem potrzebuję tych w każdej pojedynczej klasie jednostek.

Moje pytanie brzmi: czy istnieje sposób konfiguracji tego globalnie poprzez konfigurację sprężyn? (unikanie XML, najlepiej)

EDYCJA: Wydaje się, że to pytanie zostało uznane za duplikat, ale nie sądzę. Prawdziwym pytaniem jest tutaj, jak skonfigurować go za pomocą konfiguracji wiosna, którego nie mogłem znaleźć w innych pytaniach.

Odpowiedz

14

Jeśli używasz Wiosna Boot, to jest tak proste, jak:

spring.jackson.serialization-inclusion=non_null 

Jeśli nie, to można skonfigurować ObjectMapper w MappingJackson2HttpMessageConverter tak:

@Configuration 
class WebMvcConfiguration extends WebMvcConfigurationSupport { 
    @Override 
    protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) { 
     for(HttpMessageConverter converter: converters) { 
      if(converter instanceof MappingJackson2HttpMessageConverter) { 
       ObjectMapper mapper = ((MappingJackson2HttpMessageConverter)converter).getObjectMapper() 
       mapper.setSerializationInclusion(Include.NON_NULL); 
      } 
     } 
    } 
} 
+11

Wygląda na to, że musisz użyć 'spring.jackson.default-property-inclusion = non_null' z nowszym Spring Bootem (1.5.2) –

+0

dlaczego nie pracować dla XmlMapper? – Suroj

3

Jeśli używasz jackson ObjectMapper generowania JSON, można zdefiniować następujące niestandardowe ObjectMapper do tego celu i używać go zamiast:

<bean id="jacksonObjectMapper" class="com.fasterxml.jackson.databind.ObjectMapper"> 
    <property name="serializationInclusion"> 
     <value type="com.fasterxml.jackson.annotation.JsonInclude.Include">NON_NULL</value> 
    </property> 
</bean> 
0

Programowe alternatywą dla odpowiedź Abolfazl Hashemi „s jest następujący:

/** 
* Jackson configuration class. 
*/ 
@Configuration 
public class JacksonConfig { 

    @Bean 
    public ObjectMapper buildObjectMapper() { 
     return new ObjectMapper().setSerializationInclusion(Include.NON_NULL); 
    } 
} 

ten sposób jesteś w zasadzie mówi do pojemnika wiosennym, że każdy razem, gdy ObjectMapper służy jedynie nieruchomości o wartości nie są null do uwzględnienia w mapowaniach.

Powiązane problemy