JsonTypeInfo für eine bestimmte UnterklasseJava

Java-Forum
Anonymous
 JsonTypeInfo für eine bestimmte Unterklasse

Post by Anonymous »

Code

Code: Select all

package org.example;

public class Container {
private Base base;
public void setBase(Base newBase) {
base = newBase;
}
public String getName() {
return base.getName();
}
}
=========
package org.example;

import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeInfo.Id;

@JsonTypeInfo(defaultImpl = Sub1.class, use = Id.NONE)
public abstract class Base {
public abstract String getName();
}
=========
package org.example;

public class Sub1 extends Base {
private String name;
@Override
public String getName() {
return name;
}
}
=============
package org.example;

public class Sub2 extends Base {
private String title;
public Sub2(String newTitle) {
title = newTitle;
}
@Override
public String getName() {
return title;
}
}
Die Absicht ist: Wenn eine Instanz von Container aus JSON deserialisiert wird, ist die Mitgliederbasis immer eine Instanz von Sub1. setBase() kann aufgerufen werden, um den Wert von base zu ändern (auch in eine Instanz von Sub2).
Der folgende Code schlägt jedoch beim zweiten Aufruf von objectMapper.readValue()
fehl

Code: Select all

package org.example;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Main {
public static void main(String[] args) throws JsonProcessingException {
Container container = new Container();
container.setBase(new Sub2("bb"));

System.out.println(container.getName());
ObjectMapper objectMapper = new ObjectMapper();
Sub1 sub1 = objectMapper.readValue("""
{"name":"cc"}
""", Sub1.class);
container.setBase(sub1);
System.out.println(container.getName());
container = objectMapper.readValue(
"""
{
"base":{
"name":"aa"
}
}
""", Container.class);
}
}
Die Ausnahme ist

Instanz von org.example.Base kann nicht erstellt werden

und ich verstehe nicht, warum die Annotation @JsonTypeInfo nicht ausreicht, um Jackson anzuweisen, Sub1 zu instanziieren.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post