Com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Typ-ID „[“ konnte nicht als Untertyp aufgelöst werdenJava

Java-Forum
Anonymous
 Com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Typ-ID „[“ konnte nicht als Untertyp aufgelöst werden

Post by Anonymous »

Ich habe eine abstrakte Klasse namens Fruit und füge @JsonTypeInfo und @JsonSubTypes wie folgt ein:

Code: Select all

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "fruits")
@JsonSubTypes({
@Type(value = Apple.class, name = "sandbox.Apple"),
@Type(value = FruitGroup.class, name = "sandbox.FruitGroup")
})
public abstract class Fruit {

public abstract String getName();

@Override
public String toString() {
return "Fruit [getName()=" + getName() + ", getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString() + "]";
}
}
Und meine abgeleitete Klasse sieht so aus

Code: Select all

@JsonTypeName("sandbox.Apple")
public class Apple extends Fruit {

private String _name;

public void setName(String name) {
_name = name;
}

@Override
public String getName() {
return _name;
}
======[AKTUALISIERT]======
Ich habe auch die Klasse FruitGroup, die Fruit erweitert und Array of Fruit enthält.

Code: Select all

@JsonTypeName("sandbox.FruitGroup")
public class FruitGroup extends Fruit {
private Fruit[] _Fruit;
private String _name;
private String _category;

public Fruit[] getFruit() {
return _Fruit;
}

public void setFruits(Fruit[] fruits) {
_Fruit = fruits;
}

public void setName(String name) {
_name = name;
}

@Override
public String getName() {
return _name;
}

public void setCategory(String category) {
_category = category;
}

public String getCategory() {
return _category;
}
Als ich versuchte, den JSON-Text in ein Fruit-Objekt zu deserialisieren, fand ich die folgende Ausnahme:

Code: Select all

Exception in thread "main" com.fasterxml.jackson.databind.exc.InvalidTypeIdException: Could not resolve type id '[' as a subtype of `sandbox.FruitGroup`: known type ids = [FruitGroup, sandbox.Apple] at [Source: (String)"{"fruits":[["sandbox.Apple",{"name": "Apple"}]],"name": "Fruit Group"}"; line: 1, column: 11]
at com.fasterxml.jackson.databind.exc.InvalidTypeIdException.from(InvalidTypeIdException.java:43)
Der JSON-Text [AKTUALISIERT] wurde tatsächlich von Jackson Version 2.10.2 generiert und ich habe bisher keine JSON-Anmerkungen in meine Klassen eingefügt. Nachdem ich die Jackson-Version auf 2.11.0 aktualisiert habe, aktualisiere ich auch meine abstrakte Klasse, um die JSON-Anmerkungen darin einzufügen. Dann habe ich versucht, es mit Jackson Version 2.11.0 zu deserialisieren, aber stattdessen wurde eine Fehlermeldung angezeigt. Könntet ihr mir helfen, dieses Problem zu lösen?
Hier ist mein JSONtext

Code: Select all

{
"fruit": [
[
"sandbox.Apple",
{
"name": "Apple1"
}
]
],
"name": "Group of apples",
"category": "Sweet fruit"
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post