Java 如何使用BeanSerializerModifier添加新属性';改变属性?

Java 如何使用BeanSerializerModifier添加新属性';改变属性?,java,json,serialization,jackson,Java,Json,Serialization,Jackson,我的代码: 私有类CustomBeanSerializerModifier扩展了BeanSerializerModifier{ @凌驾 公共列表changeProperties(SerializationConfig配置, Bean描述Bean描述,列出Bean属性){ List beanPropertiesToIgnore=new ArrayList(); 如果(!CollectionUtils.isEmpty(fieldSettingsMap)){ 对于(int i=0;i

我的代码:

私有类CustomBeanSerializerModifier扩展了BeanSerializerModifier{
@凌驾
公共列表changeProperties(SerializationConfig配置,
Bean描述Bean描述,列出Bean属性){
List beanPropertiesToIgnore=new ArrayList();
如果(!CollectionUtils.isEmpty(fieldSettingsMap)){
对于(int i=0;i

我想在这里添加一个新属性,比如String identifier=“someValue”; 我希望将这个属性添加到序列化的json中(附带一些条件)

BeanPropertyWriter的唯一构造函数接受大量参数:

new BeanPropertyWriter(propDef, member, contextAnnotations, declaredType, ser, typeSer, serType, suppressNulls, suppressableValue)
我可以在这里添加一个新的属性吗?
如果是,我应该在这里传递给构造函数的值是什么?

这不是一种简单的方法,但您可以尝试以下方法

从你的代码中,我看到了这一点

BeanPropertyWriter beanPropertyWriter = beanProperties.get(i);
使用新属性的复制构造函数创建此beanPropertyWriter的副本(使用以下方法,因为原始构造函数受保护,因此不可见)

这将使用复制构造函数更改字段名

不确定值部分,但似乎_字段保持相同。 您是否可以通过调试器检查值来自哪个字段,并相应地更改它。 比如说,如果_字段持有该值,那么这可能会起作用

public class CustomBeanPropertyWriter extends BeanPropertyWriter {

        protected Field setField(Field newValue){
            super._field = newValue;
        }

        protected CustomBeanPropertyWriter(BeanPropertyWriter base, String newFieldName, Field newFieldValue) {
            super(base, new SerializedString(newFieldName));
            setField(newFieldValue);
        }
    }
public class CustomBeanPropertyWriter extends BeanPropertyWriter {

        protected Field setField(Field newValue){
            super._field = newValue;
        }

        protected CustomBeanPropertyWriter(BeanPropertyWriter base, String newFieldName, Field newFieldValue) {
            super(base, new SerializedString(newFieldName));
            setField(newFieldValue);
        }
    }