Maison > Java > Les objets JsonNullable ont toujours la valeur isPresent = true

Les objets JsonNullable ont toujours la valeur isPresent = true

PHPz
Libérer: 2024-02-08 22:42:27
avant
678 Les gens l'ont consulté

JsonNullable est un objet couramment utilisé en PHP. Il a toujours la caractéristique que la valeur isPresent est vraie. Cela signifie qu'un objet JsonNullable est considéré comme présent, qu'il soit nul ou non. L'éditeur PHP Xinyi explorera les utilisations et les caractéristiques de l'objet JsonNullable dans l'article suivant et expliquera pourquoi sa valeur isPresent est toujours vraie. Grâce à une compréhension approfondie de l'objet JsonNullable, nous pouvons mieux comprendre son application et ses avantages dans le développement PHP.

Contenu de la question

J'ai un fichier au format json. Il stocke les objets json que j'utilise dans mes tests. J'ai utilisé objectmapper pour convertir ce fichier en objets et il s'est bien converti, mais il y a un problème. Tous les champs de l'objet ont un type de wrapper jsonnullabel. Le problème est le suivant : tous les objets jsonnullabel, même s'ils contiennent une valeur d'attribut nulle, sont présents = true. Par conséquent, les méthodes « orelse » et « ispresent » ne fonctionnent pas correctement. J'ai eu du NPE. Comment puis-je m'assurer que lors de la conversion à partir d'une chaîne ou d'un fichier json, ces champs sont égaux à « faux » s'il contient des valeurs nulles ?

exemple json :

65bee5661098c

J'ai essayé cette configuration pour objectmapper : Configuration du mappeur d'objets :

ObjectMapper objectMapper = new ObjectMapper();
    objectMapper.registerModule(new JavaTimeModule());
    objectMapper.registerModule(new Jdk8Module());
    objectMapper.registerModule(new JsonNullableModule());
    objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
    objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    objectMapper.configure(MapperFeature.DEFAULT_VIEW_INCLUSION, false);
Copier après la connexion

Workaround

Essayez d'utiliser @jsondeserialize jackson annotation sur les membres de la classe qui est nullable en json et vous voulez que la valeur soit "false" au lieu de null comme ceci :

public class MyJsonClass {
    @JsonDeserialize(using = CustomDeserializer.class)
    public String nullableMember;
}

public class CustomDeserializer
  extends StdDeserializer<String> {

    public CustomDeserializer() { 
        this(null); 
    } 

    public CustomDeserializer(Class<?> vc) { 
        super(vc); 
    }

    @Override
    public String deserialize(JsonParser jsonparser, DeserializationContext context) {
        String text = jsonparser.getText();
        if (null == text) {
          text = "false";
        }
        return text;
    }
}
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal