Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 再次在派生类中的Jackson中添加字段,该字段在基类中已被忽略_Java_Json_Jackson - Fatal编程技术网

Java 再次在派生类中的Jackson中添加字段,该字段在基类中已被忽略

Java 再次在派生类中的Jackson中添加字段,该字段在基类中已被忽略,java,json,jackson,Java,Json,Jackson,我在杰克逊身上遇到了一个奇怪的现象: 我为一个基类(AbstractPersistentObject)添加了一个mixin,其中只包含一个字段(id)的@JsonIgnore,因为我想在所有派生类中抑制它。这很有效 现在,我想为一个派生类(Product)导出此字段 因此,我为此类配置了一个mixin,如下所示: @JsonAppend( attrs = { @JsonAppend.Attr(value="id", incl

我在杰克逊身上遇到了一个奇怪的现象: 我为一个基类(
AbstractPersistentObject
)添加了一个mixin,其中只包含一个字段(id)的
@JsonIgnore
,因为我想在所有派生类中抑制它。这很有效

现在,我想为一个派生类(
Product
)导出此字段

因此,我为此类配置了一个mixin,如下所示:

@JsonAppend( attrs = { @JsonAppend.Attr(value="id", include=Include.ALWAYS) } ) ... @JsonAppend( 属性={ @JsonAppend.Attr(value=“id”,include=include.ALWAYS) } ) ... 就目前为该实体导出此字段而言,这是有效的,但其值始终为
null
,其中对象中此字段的值绝对不是null。怎么会?我该怎么做才能使这个字段及其正确的值重新出现在生成的JSON中

我还尝试用另一个名称导出此字段,在
@JsonAppend
中指定
propName=“productId”
,但此新命名的字段也始终具有值
null

还有
@JsonProperty(“productId”)公共抽象字符串getId()不起作用;该字段没有再次出现

也许在派生类中不可能正确处理基类的属性

我绝对不想在每个派生类中排除这个字段,除了一个,因为有很多派生类;可能还会有更多的,必须一视同仁(那时我会忘记的,哦)


我使用jackson 2.6.7。

经过长时间令人沮丧的调查,我终于找到了一个有效的解决方案。 我需要编写VirtualBeanPropertyWriter的子类,它返回对象的id字段的值:

公共类VirtualBeanProductIdPropertyWriter扩展了VirtualBeanPropertyWriter{
公共虚拟BeanProductidPropertyWriter(){
}
公共VirtualBeanProductIdPropertyWriter(BeanPropertyDefinition propDef、注释contextAnnotations、JavaType declaredType)
{
超级(propDef、contextAnnotations、declaredType);
}
@凌驾
受保护的对象值(对象bean、JsonGenerator jgen、SerializerProvider prov)引发异常{
if(AbstractPersistentObject的bean实例){
return((AbstractPersistentObject)bean.getId();
}
返回null;
}
@凌驾
带有配置的公共VirtualBeanPropertyWriter(MapperConfig配置、AnnotatedClass declaringClass、BeanPropertyDefinition propDef、JavaType类型){
返回新的VirtualBeanProductIdPropertyWriter(propDef,null,type);
}
}
并在mixin中进行如下配置:

@JsonAppend( attrs = { @JsonAppend.Attr(value="id", include=Include.ALWAYS) } ) ...
@JsonAppend(prepend=true,
道具={
@JsonAppend.Prop(name=“productId”,value=VirtualBeanProductIdPropertyWriter.class,include=include.ALWAYS,required=true)
}
)
...
看起来带有
attrs
的变量确实无法引用继承的属性