Jackson java.util.Optional Serialisierung nicht enthalten Typ ID

Habe ich die folgenden Klassen:

@JsonIdentityInfo(
    generator = ObjectIdGenerators.IntSequenceGenerator.class,
    property = "oid"
)
@JsonTypeInfo(
    use = JsonTypeInfo.Id.NAME,
    include = JsonTypeInfo.As.PROPERTY,
    property = "clazz")
@JsonSubTypes({
    @JsonSubTypes.Type(value = MySubEntity.class, name = "MySubEntity"),
})
public abstract class Entity {
    ...
}

public class MySubEntity extends Entity {
    ...
}

Wenn ich jetzt serialisieren, dass MySubEntity eingewickelt in ein Optional dann JSON enthält nicht die clazz Attribut mit dem Typ ID. Bug? Wenn ich serialisieren zu List<MySubEntity> oder einfach nur zu MySubEntity es funktioniert gut.

Setup: jackson-databind-Methode 2.9.4, jackson-datatype-jdk8 2.9.4, Serialisierung geschieht in Spring-Boot-Anwendung, die Bereitstellung einer RESTful-web-service.

EDIT: Hier ist die Spring-REST-Methode, gibt die Optional:

@RequestMapping(method = RequestMethod.GET, value = "/{uuid}", produces = "application/json")
public Optional<MySubEntity> findByUuid(@PathVariable("uuid") String uuid) {
    ...
}

EDIT:
Ich aus einem SSCCE mit einem einfachen Feder-REST-controller und zwei tests. Der erste test ist mit ObjectMapper direkt die erfolgreich Deserialisierung obwohl die clazz fehlt. Der zweite test ruft die REST-controller und bricht mit einer Fehlermeldung ab, weil clazz fehlt:

Fehler beim extrahieren Antwort für " Typ [class com.Beispiel.demo.MySubEntity] und content-type [application/json;charset=UTF-8]; verschachtelte Ausnahme ist org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Missing id-Typ, wenn Sie versuchen zu beheben Subtyp von [einfache Art, Klasse com.Beispiel.demo.MySubEntity]: fehlende Typ-id-Eigenschaft 'clazz'; verschachtelte Ausnahme ist com.fasterxml.jackson.databind-Methode.exc.InvalidTypeIdException: Fehlende Typ-id, wenn Sie versuchen zu beheben Subtyp von [einfache Art, Klasse com.Beispiel.demo.MySubEntity]: fehlende Typ-id-Eigenschaft 'clazz'

  • Nur um zu klären, versuchen Sie zu Entität serialisieren zu JSON oder zu Deserialisieren es von JSON?
  • Ich mache beides. Meine Frühlings-REST-webservice ist die Herstellung von JSON und meine client-Anwendung ist die Einnahme. Model-Klassen sind geteilt zwischen server und client.
  • Verwenden Sie spring-boot? Versuchen Sie, entfernen die version von Abhängigkeit. Mit spring-boot-starter-parent als Elternteil oder als Stückliste in Ihre pom.xml beheben sollten, die richtige version für Abhängigkeiten. Mit exakt dem gleichen controller, die Antwort, die ich bekommen hab ist {"clazz":"MySubEntity","oid":1}.
  • Könnten Sie, bitte, poste die json Antwort, die Sie bekommen?
  • Ich fügte hinzu, ein SSCCE. Wenn Sie etwas Zeit haben, können Sie es versuchen. Rufen Sie einfach die test-Aufgabe von gradle bauen.
  • Json-Antwort ist: {"oid":1,"uuid":"1234","someProperty":"test"}

Schreibe einen Kommentar