Maison >Java >javaDidacticiel >Comment personnaliser l'ObjectMapper de Spring pour sérialiser uniquement les propriétés annotées @JsonProperty ?

Comment personnaliser l'ObjectMapper de Spring pour sérialiser uniquement les propriétés annotées @JsonProperty ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-04 06:16:11982parcourir

How to Customize Spring's ObjectMapper to Serialize Only @JsonProperty Annotated Properties?

Configuration d'ObjectMapper dans Spring

Dans les applications Spring, l'ObjectMapper est un composant crucial pour sérialiser et désérialiser les données JSON. Vous pouvez personnaliser l'ObjectMapper pour répondre à des exigences spécifiques, telles que la sérialisation uniquement des propriétés annotées avec @JsonProperty.

Pour y parvenir, la première étape consiste à créer une classe ObjectMapper personnalisée qui étend la classe de base ObjectMapper fournie par Jackson. Remplacez le vérificateur de visibilité par défaut pour exclure les propriétés non annotées :

public class MyCustomObjectMapper extends ObjectMapper {
    public MyCustomObjectMapper() {
        super();
        setVisibilityChecker(getSerializationConfig()
                .getDefaultVisibilityChecker()
                .withCreatorVisibility(JsonAutoDetect.Visibility.NONE)
                .withFieldVisibility(JsonAutoDetect.Visibility.NONE)
                .withGetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withIsGetterVisibility(JsonAutoDetect.Visibility.NONE)
                .withSetterVisibility(JsonAutoDetect.Visibility.DEFAULT));
    }
}

Ensuite, enregistrez le bean ObjectMapper personnalisé dans le fichier de configuration Spring (servlet.xml) :

<bean>

Enfin, configurez le framework MVC basé sur les annotations 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="customObjectMapper" />
            </bean>
        </list>
    </property>
</bean>

Dans l'exemple de code fourni, le La classe NumbersOfNewEvents contient deux attributs publics :

public class NumbersOfNewEvents implements StatusAttribute {
    public Integer newAccepts;
    public Integer openRequests;
    // ...
}

Cependant, seul l'attribut newAccepts est annoté avec @JsonProperty :

@JsonProperty
public Integer newAccepts;

En configurant l'ObjectMapper comme décrit ci-dessus, seul l'attribut newAccepts doit être sérialisé lorsque l'objet NumbersOfNewEvents est converti en JSON. En effet, l'ObjectMapper personnalisé exclura les propriétés non annotées lors de la sérialisation.

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