Maison >Java >javaDidacticiel >Comment configurer ObjectMapper au printemps pour la sérialisation et la désérialisation JSON personnalisées ?

Comment configurer ObjectMapper au printemps pour la sérialisation et la désérialisation JSON personnalisées ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-05 07:15:16852parcourir

How to Configure ObjectMapper in Spring for Custom JSON Serialization and Deserialization?

Configuration d'ObjectMapper au Spring

Au Spring, l'ObjectMapper peut être configuré pour répondre à des exigences spécifiques. Ceci est particulièrement utile lorsque vous souhaitez contrôler le comportement de sérialisation et de désérialisation de vos données JSON.

Un scénario courant consiste à exclure certaines propriétés de la sérialisation à moins qu'elles ne soient explicitement annotées. Pour y parvenir, nous suivons ces étapes :

  1. Créer un ObjectMapper personnalisé :

    public class CompanyObjectMapper extends ObjectMapper {
        public CompanyObjectMapper() {
            super();
            setVisibilityChecker(getSerializationConfig()
                    .getDefaultVisibilityChecker()
                    .withCreatorVisibility(JsonAutoDetect.Visibility.NONE)
                    .withFieldVisibility(JsonAutoDetect.Visibility.NONE)
                    .withGetterVisibility(JsonAutoDetect.Visibility.NONE)
                    .withIsGetterVisibility(JsonAutoDetect.Visibility.NONE)
                    .withSetterVisibility(JsonAutoDetect.Visibility.DEFAULT));
        }
    }
  2. Inclure l'ObjectMapper personnalisé dans Spring configuration :

    <bean>
  3. Configurer Spring MVC pour utiliser l'ObjectMapper personnalisé :

    <bean
        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <list>
                <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
                    <property name="objectMapper" ref="jacksonObjectMapper" />
                </bean>
            </list>
        </property>
    </bean>

Cependant, cette approche peut ne pas fonctionner comme prévu si vous utilisez les versions Spring 3.0.5 et Jackson 1.8.0. Pour résoudre ce problème, il est recommandé d'utiliser la configuration basée sur les annotations suivante avec Spring Boot et Jackson 2.4.6 ou version ultérieure :

@Configuration
public class JacksonConfiguration {

    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true);

        return mapper;
    }
}

Cette configuration permettra à l'ObjectMapper de sérialiser uniquement les propriétés qui ont le @ Annotation JsonProperty, satisfaisant l'exigence souhaitée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn