"Я пытаюсь использовать JsonInclude и SubType для сериализации и десериализации. Кажется, это работает, когда я передаю атрибут типа из Postman как" A "или" B ". Я добавил новый тип" C ", который также связан с классом A .class. Однако он не может его создать и вместо этого создает класс по умолчанию (B.class). Я не ошибаюсь. В документации не говорится, что мы не можем иметь два разных имени, связанных с одним и тем же классом.
@JsonInclude(Include.NON_EMPTY)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type", visible = true, defaultImpl = B.class)
@JsonSubTypes({@JsonSubTypes.Type(value = B.class, name = "B"),
@JsonSubTypes.Type(value = A.class, name = "A"),
@JsonSubTypes.Type(value = A.class, name = "C")})
public abstract class U implements Serializable {
...
...
abstract Role getRole();
@JsonProperty("type")
String type;
Getters and Setters
}
@JsonInclude(JsonInclude.Include.NON_EMPTY)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonTypeName
public class A extends U implements Serializable {
....
public Role getRole() {
String type = getType();
switch(type) {
case "A" :
return Role.A;
case "C" :
return Role.C;
default :
throw new RuntimeException();
}
}
}
Еще немного информации. В зависимости от типа «А, С». Я определяю роль.
Я получаю ошибку Casting, так как ожидаю создания класса A, но вместо этого создаю класс B (по умолчанию). Любая помощь приветствуется. Спасибо.