当没有为该数组分配类字段时,Jackson无法使用对象反序列化数组

我在反序列化以下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),或者我缺少某些杰克逊注释,或者我使用了错误的方式?

fleia 回答:当没有为该数组分配类字段时,Jackson无法使用对象反序列化数组

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3120714.html

大家都在问