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

Les objets JsonNullable ont toujours la valeur isPresent = true

PHPz
PHPzavant
2024-02-08 22:42:27578parcourir

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);

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;
    }
}

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer