web-dev-qa-db-fra.com

Comment ignorer les propriétés "null" ou vides dans json, globalement, à l'aide de la configuration de Spring

J'essaie de renvoyer uniquement les propriétés qui ont des valeurs, mais les valeurs nulles sont également renvoyées.

Je sais qu’il existe une annotation qui le fait (@JsonInclude(Include.NON_NULL)), mais j’ai besoin de cela dans chaque classe d’entités.

Ma question est donc la suivante: y a-t-il un moyen de configurer cela globalement à travers la configuration printanière? (éviter XML, de préférence)

EDIT: Il semble que cette question a été considérée comme un doublon, mais je ne le pense pas. La vraie question ici est de savoir comment le configurer via spring config, ce que je n’ai pas pu trouver dans d’autres questions.

9
Pedro Silva

Si vous utilisez Spring Boot, c'est aussi simple que:

spring.jackson.serialization-inclusion=non_null

Sinon, vous pouvez configurer ObjectMapper dans le MappingJackson2HttpMessageConverter comme suit:

@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);
            }
        }
    }
}
16
Jon Peterson

Si vous utilisez jackson ObjectMapper pour générer json, vous pouvez définir à cet effet ObjectMapper personnalisé suivant et l'utiliser à la place:

<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>
3
Abolfazl Hashemi

L'alternative programmatique à la réponse de Abolfazl Hashemi est la suivante:

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

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

Ainsi, vous indiquez au conteneur Spring que, chaque fois que vous utilisez une variable ObjectMapper, seules les propriétés avec des valeurs non NULL doivent être incluses dans les mappages.

0
aribeiro