JsonSubType не сериализуется в соответствующий класс - PullRequest
0 голосов
/ 17 мая 2018

"Я пытаюсь использовать 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 (по умолчанию). Любая помощь приветствуется. Спасибо.

...