Jackson Java to JSON Object mapper изменяет имя поля
использование Jackson для преобразования объекта Java в JSON
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(Include.NON_NULL);
jsonMessage = mapper.writeValueAsString(object);
результатом является то, что поле "участники" (которое является частью экземпляра объекта)
participants Arrays$ArrayList<E>
переименовывается в "participantsList"
participantsList":[{"userId":"c1f9c"}]
т. е. "список" добавляется к имени Поля. Я просмотрел документацию Джексона, но не нашел способа предотвратить это. Возможно ли это? Тестирование вышеуказанного кода в автономном проекте не приводит к тому же результату (т. е. переименование не происходит). Почему Джексон так себя ведет? К сожалению, объект является третьей стороной, и я не могу его изменить.
использование Jackson версии 2.3.3 (такое же поведение проверено с 2.9.0).
2 ответов
комментарий Александра указал в правильном направлении. Действительно, существует getParticipantsList (), который Джексон, похоже, учитывает при определении имени Поля JSON. Однако, как я писал ранее, я не могу внести какие-либо изменения, учитывая, что это объект третьей стороны.
но, с лучшим пониманием того, что вызывает проблему, я смог придумать решение:
mapper.setVisibilityChecker(mapper.getVisibilityChecker().withFieldVisibility(Visibility.ANY).withGetterVisibility(Visibility.NONE).withIsGetterVisibility(Visibility.NONE));
или
mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
mapper.setVisibility(PropertyAccessor.GETTER, Visibility.NONE);
mapper.setVisibility(PropertyAccessor.IS_GETTER, Visibility.NONE);
возможно, вы можете использовать USE_ANNOTATIONS, чтобы пропустить аннотации следующим образом:
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
mapper.configure(MapperFeature.USE_ANNOTATIONS, false);
String jsonMessage = mapper.writeValueAsString(object);