Heim > Java > JsonNullable-Objekte haben immer den isPresent-Wert = true

JsonNullable-Objekte haben immer den isPresent-Wert = true

PHPz
Freigeben: 2024-02-08 22:42:27
nach vorne
677 Leute haben es durchsucht

JsonNullable ist ein häufig verwendetes Objekt in PHP. Es hat immer die Eigenschaft, dass der isPresent-Wert wahr ist. Das bedeutet, dass ein JsonNullable-Objekt als vorhanden gilt, unabhängig davon, ob es null ist oder nicht. Der PHP-Editor Xinyi wird im folgenden Artikel die Verwendung und Eigenschaften des JsonNullable-Objekts untersuchen und erklären, warum sein isPresent-Wert immer wahr ist. Durch ein tiefes Verständnis des JsonNullable-Objekts können wir seine Anwendung und Vorteile in der PHP-Entwicklung besser verstehen.

Frageninhalt

Ich habe eine Datei im JSON-Format. Es speichert JSON-Objekte, die ich in meinen Tests verwende. Ich habe Objectmapper verwendet, um diese Datei in Objekte zu konvertieren, und die Konvertierung funktionierte einwandfrei, aber es gibt ein Problem. Alle Felder im Objekt haben den Wrapper-Typ jsonnullabel. Das Problem ist wie folgt: Alle jsonnullabel-Objekte, auch wenn sie einen Null-Attributwert enthalten, sind vorhanden = true. Daher funktionieren die Methoden „orelse“ und „ispresent“ nicht ordnungsgemäß. Ich habe NPE. Wie kann ich sicherstellen, dass diese Felder beim Konvertieren aus einer String- oder JSON-Datei den Wert „false“ haben, wenn darin Nullwerte enthalten sind?

json-Beispiel:

65bee5661098c

Ich habe diese Konfiguration für Objectmapper ausprobiert: Objekt-Mapper-Konfiguration:

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);
Nach dem Login kopieren

Workaround

Versuchen Sie, @jsondeserialize jackson-Annotation für Klassenmitglieder zu verwenden, die in JSON nullbar sind, und Sie möchten, dass der Wert „false“ statt null ist, wie folgt:

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;
    }
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonJsonNullable-Objekte haben immer den isPresent-Wert = true. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage