Java JsonSubType未序列化到适当的类
“我试图使用JsonInclude和子类型进行序列化和反序列化。当我将Postman的type属性作为“A”或“B”传递时,它似乎起作用。我添加了新的类型“C”,它也绑定到类A.class。但是,它无法创建它并创建默认类(B.class)相反,我不知道它有什么问题。文档并没有说我们不能将两个不同的名称绑定到同一个类Java JsonSubType未序列化到适当的类,java,json,jackson,jackson-databind,Java,Json,Jackson,Jackson Databind,“我试图使用JsonInclude和子类型进行序列化和反序列化。当我将Postman的type属性作为“A”或“B”传递时,它似乎起作用。我添加了新的类型“C”,它也绑定到类A.class。但是,它无法创建它并创建默认类(B.class)相反,我不知道它有什么问题。文档并没有说我们不能将两个不同的名称绑定到同一个类 @JsonInclude(Include.NON_EMPTY) @JsonIgnoreProperties(ignoreUnknown = true) @JsonTy
@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();
}
}
}
更多信息。取决于“A,C”类型。我确定角色
我得到了铸造错误,因为我期待类A被创建,但创建类B代替(默认的一个)。非常感谢您的帮助。谢谢。这在新的Jackson 2.6版中应该可以使用,但对我来说不起作用。
getRole
中的switch
语句试图重现通常应该通过键入/继承获得的行为。如果使用类A{getRole(){return Role.A;},则会更干净
和类C{getRole(){return Role.C;}
问题将自行消失。是的。这是一种更干净的方法。但是,我避免了这种情况,这样我就不会仅仅通过添加一个角色不同的C类而对整个存储库进行CRUD更改。我明确添加了jackson databind 2.6.2依赖项。我添加了gradle依赖项来显示依赖项树。它是拉入数据绑定依赖项。