Maison >Java >javaDidacticiel >Comment configurer l'ObjectMapper de Spring pour sérialiser uniquement les éléments annotés @JsonProperty ?

Comment configurer l'ObjectMapper de Spring pour sérialiser uniquement les éléments annotés @JsonProperty ?

DDD
DDDoriginal
2024-12-02 15:19:11701parcourir

How to Configure Spring's ObjectMapper to Serialize Only @JsonProperty Annotated Elements?

Comment configurer ObjectMapper dans Spring

Problème :

Vous souhaitez configurer ObjectMapper dans Spring pour sérialiser uniquement les éléments annotés avec @JsonProperty. Cependant, malgré le respect des instructions recommandées, la classe NumbersOfNewEvents contient toujours tous les attributs une fois sérialisée.

Explication :

Dans le CompanyObjectMapper personnalisé, vous avez défini le vérificateur de visibilité. pour masquer tous les champs et getters/setters par défaut. Cela empêche ObjectMapper d'accéder et de sérialiser les champs newAccepts et openRequests.

Solution :

Pour obtenir le résultat souhaité, vous pouvez utiliser une approche plus ciblée pour configurer la visibilité vérificateur. Voici un exemple :

public class CompanyObjectMapper extends ObjectMapper {
    public CompanyObjectMapper() {
        super();
        SerializationConfig config = getSerializationConfig();
        config.withView(Some.class)   // Specify which view to use
             .withVisibility(JsonAutoDetect.Visibility.NONE)
             .withVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
    }
}

Cette configuration permettra de sérialiser les propriétés avec l'annotation @JsonProperty, tout en gardant les autres champs masqués.

Configuration Spring Boot :

Si vous utilisez Spring Boot et Jackson 2.4.6 ou supérieur, vous pouvez utiliser ce qui suit configuration :

@Configuration
public class JacksonConfiguration {

    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper mapper = new ObjectMapper();
        mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);  // Enable default typing for polymorphic types
        mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);      // Allow serialization of fields
        mapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, true);  // Enable default view inclusion
        return mapper;
    }
}

Cette configuration active la saisie par défaut pour les types polymorphes, permet la sérialisation de tous les champs et active l'inclusion de la vue par défaut.

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