我在反序列化以下json字符串时遇到问题:
String json = "{\"actions\":[[\"set-device-id\",[\"radius-avp\",\"ABC\"]]]}";
具有以下(简化的)类定义。
@JsonFormat(shape=JsonFormat.Shape.ARRAY)
@JsonTypeName("set-device-id")
static public class SetDeviceId extends Transformaction {
public RadiusAvp radiusAvp;
public SetDeviceId() { }
public SetDeviceId(RadiusAvp radiusAvp) {
this.radiusAvp = radiusAvp;
}
}
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,include = JsonTypeInfo.As.WRAPPER_ARRAY,property = "name")
@JsonSubTypes({ @JsonSubTypes.Type(Transformaction.SetDeviceId.class) })
@JsonTypeName("transform-action")
public abstract class Transformaction {
...
}
@JsonTypeName("radius-avp")
public class RadiusAvp implements ValueProvider {
public String attribute;
public RadiusAvp(String attribute) {
this.attribute = attribute;
}
String getvalue(TransformEngine.TransformData transformData) {...}
}
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,property = "name")
@JsonSubTypes({ @JsonSubTypes.Type(RadiusAvp.class),})
public interface ValueProvider {
String getvalue(TransformEngine.TransformData transformData);
}
Jackson反序列化失败,并显示以下错误:
意外的令牌(VALUE_STRING),预期的START_ARRAY:需要JSON数组包含RadiusAvp类的As.WRAPPER_ARRAY类型信息,位于[来源:(String)“ {” message-transforms“:[{” actions“:[[” set -device-id“,[” radius-avp“,” ABC“]]]}}}”“
我想知道杰克逊是否不支持这种对象映射,即在json中没有类字段分配(没有SetDeviceId.radiusAvp),或者我缺少某些杰克逊注释,或者我使用了错误的方式?