Есть ли способ изменить поле POJO и вернуть POJO

Есть ли способ изменить поле POJO с новым свойством (например, с помощью MixIns или @JSONProperty) и вернуть измененный POJO? (Способ динамического добавления/изменения поля POJO?)

Как будто у меня есть класс

 class PojoA<T>{

 private T data;//field to be modified as NewData

 }

Итак, я попробовал с MixIns, например

    public interface PojoMixIn<T> {
    @JsonProperty("NewData")
     T getData();
     }

Теперь, чтобы получить измененное поле, я использую ObjectMapper

        mapper.addMixInAnnotations(PojoA.class,PojoMixIn.class);
        mapper.writerWithDefaultPrettyPrinter().writeValueAsString(pojoA);

Фактический результат — String, но могу ли я получить модифицированный POJO?


person Jayanth    schedule 18.08.2014    source источник
comment
Я думаю, что это можно сделать с помощью reflection, но не уверен, что fastxml будет ценить...   -  person NiziL    schedule 18.08.2014
comment
Отражение, ты уверен? это не дороже?   -  person Jayanth    schedule 18.08.2014
comment
Вы хотите изменить значение поля или изменить имя поля? Первый - отражение, второй - невозможно (я думаю)   -  person Antoniossss    schedule 18.08.2014
comment
Ну, когда я слышу о динамическом изменении полей, я думаю об отражении. Но это определенно не более дешевое решение, поэтому я просто прокомментирую ваш вопрос ^^   -  person NiziL    schedule 18.08.2014
comment
@Antoniossss Мне действительно нужен второй, есть идеи?   -  person Jayanth    schedule 18.08.2014
comment
Вам нужно будет изменить байт-код на лету - javaassist   -  person Antoniossss    schedule 18.08.2014
comment
@Antoniossss Решение для динамического добавления нового поля в POJO такое же?   -  person Jayanth    schedule 18.08.2014
comment
Вы держите пари. Прямого механизма для этого нет. Когда вы компилируете класс, определения полей становятся постоянными. Поэтому, если вы хотите изменить это, вам нужно будет изменить байт-код. Когда вы проделываете такие трюки с JSon, вы используете какой-то препроцессор — в общем, что-то должно обрабатывать ваши аннотации. Тем не менее, модификации выполняются с помощью POJOS - например. позволяет изменить имя ключа на карте - просто. Но здесь вы хотите изменить определение класса во время выполнения, поэтому javaassist будет способом сделать это.   -  person Antoniossss    schedule 18.08.2014
comment
@Antoniosssss Я согласен! но мой вопрос заключается в том, что использование полей аннотаций может быть изменено, тогда можем ли мы изменить значение, переданное в аннотации, позже, когда оно будет объявлено?   -  person Jayanth    schedule 18.08.2014