2016-09-06 4 views
1

내 코드 :BeanSerializerModifier의 changeProperties에 새 속성을 추가하는 방법은 무엇입니까?

private class CustomBeanSerializerModifier extends BeanSerializerModifier{ @Override public List<BeanPropertyWriter> changeProperties(SerializationConfig config, BeanDescription beanDesc,List<BeanPropertyWriter> beanProperties){ List<BeanPropertyWriter> beanPropertiesToIgnore = new ArrayList<>(); if (!CollectionUtils.isEmpty(fieldSettingsMap)) { for (int i = 0; i < beanProperties.size(); i++) { BeanPropertyWriter beanPropertyWriter = beanProperties.get(i); ... ...

내가 원하는 것은, 캐릭터 라인 식별자 = "someValue와 '라고 여기에 새로운 속성을 추가하는 것입니다; 이 속성을 직렬화 된 JSON에 추가해야합니다 (일부 조건 포함).

new BeanPropertyWriter(propDef, member, contextAnnotations, declaredType, ser, typeSer, serType, suppressNulls, suppressableValue) 

내가 모두 여기에 새로운 속성을 추가 할 수 있습니다

BeanPropertyWriter의 유일한 생성자는 인수 많이 걸립니다? 예인 경우 여기서 생성자에 전달해야하는 값은 무엇입니까?

답변

1

하지 쉬운 방법하지만 당신은 당신의 코드에서 다음

을 시도 할 수있다, 나는를 사용하여 (이

BeanPropertyWriter beanPropertyWriter = beanProperties.get(i); 

새로운 속성 복사 생성자를 사용하여이 beanPropertyWriter의 사본 만들기를 참조하십시오 원래 생성자) 보호 따라서 보이지 않는 한, 방법 다음은

// Use this to create a copy of the old property, and change name to new name 
    BeanPropertyWriter newBeanPropertyWriter = new CustomBeanPropertyWriter(beanPropertyWriter,"newFieldName"); 

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

이 필드 이름을 변경하려면 복사 생성자를 사용합니다.

가치 부분에 대해서는 확실치 않지만 _field가 같을 수도 있습니다. 값을 가져올 필드를 디버거를 통해 확인하고 그에 따라 적절하게 변경할 수 있습니까? 예를 들어, _field가 값을 보유하고 있다면 이것이 작동 할 수도 있습니다.

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); 
     } 
    } 
관련 문제