JsonInclude NON_NULL funktioniert nicht bei String?

OnDemand

Top Contributor
Hi,

hab eine Klasse wie unten mit @JsonInclude(JsonInclude.Include.NON_NULL) annotiert, allerdings werden die String welche null sind, trotzdem als Json ausgegeben, wenn ich es mittels Spring RestTemplate ausgebe. NON_EMPTY funktioniert, aber dann verschwinden auch andere Felder, welche ich leer übergeben muss.

Hat jemand ne Idee warum String ignoriert wird und mit null ausgegeben wird? Ich setzte es sogar expliziet null, aber trotzdem wird das im json ausgegeben

Java:
@JsonInclude(JsonInclude.Include.NON_NULL)
public class VariantsItem{

    @JsonProperty("inventory_management")
    private String inventoryManagement;
   
    //weitere siw No-Args-Constructor, All Args Constructor und Getter Setter
   
}

Java:
VariantsItem variantsItem = new VariantsItem();
variantsItem.setInventoryManagement = null;
 

KonradN

Super-Moderator
Mitarbeiter
Also die Annotation sieht korrekt aus. Kannst Du noch Details geben, was Du genau machst?

Meine Vermutung wäre ja, dass Du in der Spring Boot Applikation einfach einen RestController hast. Daher meine Nachfrage, denn genau das sollte so funktioniern.

Um die prinzipielle Funktion zu sehen, habe ich einfach ein neues Spring Boot Projekt erstellt mit Web Abhängigkeit. Dann die zwei Klassen hinzugefügt und dann im Browser einmal aufgerufen.

Java:
package com.example.demo;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;

@JsonInclude(JsonInclude.Include.NON_NULL)
public class VariantsItem {

    @JsonProperty("inventory_management")
    private String inventoryManagement;

    private String somethingElse;

    public VariantsItem() {
    }

    public VariantsItem(String inventoryManagement, String somethingElse) {
        this.inventoryManagement = inventoryManagement;
        this.somethingElse = somethingElse;
    }

    public String getInventoryManagement() {
        return inventoryManagement;
    }

    public void setInventoryManagement(String inventoryManagement) {
        this.inventoryManagement = inventoryManagement;
    }

    public String getSomethingElse() {
        return somethingElse;
    }

    public void setSomethingElse(String somethingElse) {
        this.somethingElse = somethingElse;
    }
}

Java:
package com.example.demo;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class JsonController {

    @GetMapping("/test")
    public VariantsItem getItem() {
        return new VariantsItem(null, "test");
    }
}

Ausgabe bei Aufruf:
Code:
{"somethingElse":"test"}
 

OnDemand

Top Contributor
Lieben Dank, dann hab ich in der Annotation schon mal keinen Fehler. Ich nutze das Objekt dann später indem ich es mittels RestTemplate an eine API sende.
Java:
ResponseEntity<VariantItem> response = restTemplate.exchange(serviceURL, HttpMethod.POST, entity, VariantItem.class);

Funktioniert an anderen Stellen wunderbar, nur in dieser Klasse nicht. Hab auch schon die Importe kontrolliert, die sind aber in allen Klassen identisch.

Code:
import com.fasterxml.jackson.annotation.JsonInclude;


Selbst wenn ich debugge, sehe ich den Wert als null. Nicht als "null" und auch nicht als "" also alles korrekt. Hmmmm vielleicht fällt mir im Schlaf och was ein, sonst würde ich es als Bug vom Framework einstufen. Hab auch Lombok entfernt, weil es da auch Probleme gibt, aber die Klasse hat nun kein Lombok mehr und sollte demnach machen wie du es auch dargestellt hast.
 

KonradN

Super-Moderator
Mitarbeiter
Was ich gefunden habe:

Ich kann den Hinweis bezüglich Gson nicht ganz nachvollziehen, denn gson wird nur genommen wenn jackson nicht vorhanden ist. Und Du wirst Jackson ja nicht rausgeworfen haben, oder?

(Im Konstruktor wird halt erst Jackson geprüft und Gson erst als zweites genommen - so vorhanden:
Java:
        if (jackson2Present) {
            this.messageConverters.add(new MappingJackson2HttpMessageConverter());
        }
        else if (gsonPresent) {
            this.messageConverters.add(new GsonHttpMessageConverter());
        }

Das war es dann auch schon, was mir aufgefallen ist.
 

OnDemand

Top Contributor
Moin, danke ne ich wüsste nich mal wie ich Jackson rauswerfe, dann müsste es ja an den imports meckern, dass die Lib fehlt oder ähnliches. An anderer Stelle im Projekt klappt es ja auch, das ist echt strange. Irgendwas muss dazwischen funken
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
padde479 Cannot invoke "java.util.Map.containsKey(Object)" because "requestMap" is null Frameworks - Spring, Play, Blade, Vaadin & Co 2
T Repository wird null im Test Frameworks - Spring, Play, Blade, Vaadin & Co 6
Dimax Spring wenn Repository liefert null Frameworks - Spring, Play, Blade, Vaadin & Co 49
OnDemand Autowired null Verständnisproblem Frameworks - Spring, Play, Blade, Vaadin & Co 8
OnDemand Spring Boot Repository null Frameworks - Spring, Play, Blade, Vaadin & Co 1
OnDemand Spring Boot Mapping null bei GET Aufruf Frameworks - Spring, Play, Blade, Vaadin & Co 8
F spring post null werte Frameworks - Spring, Play, Blade, Vaadin & Co 1
W Spring-Beans nach Einbindung von SpringSecurity null Frameworks - Spring, Play, Blade, Vaadin & Co 3
F Debugging springt nicht in Methode - liefert null Frameworks - Spring, Play, Blade, Vaadin & Co 2
gradlew.bat spring-boot:run funktioniert nicht Frameworks - Spring, Play, Blade, Vaadin & Co 4
D Mapstruct Dependency Injection funktioniert nicht mit Spring Frameworks - Spring, Play, Blade, Vaadin & Co 15
OnDemand SpringBoot Logrotation funktioniert nicht Frameworks - Spring, Play, Blade, Vaadin & Co 6
JanKrieger05 Validierung vom nested Objekt funktioniert nicht Frameworks - Spring, Play, Blade, Vaadin & Co 0
S Spring - Zugriff auf Modellattribute in JPA funktioniert nicht Frameworks - Spring, Play, Blade, Vaadin & Co 1
tom.j85 SpringBoot Rest-Application funktioniert nicht - Keine Fehlermeldungen Frameworks - Spring, Play, Blade, Vaadin & Co 13
S Zeitmessung springt vorraus und funktioniert nicht! Frameworks - Spring, Play, Blade, Vaadin & Co 4
S Spring MVC Rest Multipart Upload funktioniert nicht! Frameworks - Spring, Play, Blade, Vaadin & Co 1
M Spring DI funktioniert nicht Frameworks - Spring, Play, Blade, Vaadin & Co 1
Y Spring - @Autowired funktioniert nicht Frameworks - Spring, Play, Blade, Vaadin & Co 12

Ähnliche Java Themen

Neue Themen


Oben