Я недавно обновился до версии Genson 1.3, и я не уверен на 100%, если эта проблема новая или нет. Ранее я исправил версию 0.98, чтобы она работала.Genson Кэширование фасонных аксессуаров
Контекст
Мы используем нашу собственную реализацию BeanMutatorAccessorResolver. Это так, что мы можем динамически решать, должно ли быть сериализовано свойство или нет. В основном мы интегрировали Genson в наш универсальный интерфейс API REST API. Genson выполняет сериализацию и десериализацию. При выполнении запросов GET пользователь может передавать поля в URL-адресе, чтобы фильтровать те, которые ему особенно нужны (особенно для больших объектов, это необходимо, когда вам нужно только 3 поля или около того для отображения обзора таблицы). Например:? Fields = field1, field2, field3. Затем мы знаем в нашей реализации BeanMutatorAccessorResolver точно, какие поля сериализуются и какие из них игнорировать. Это в основном предназначено для ускорения запросов и синтаксического анализа, поскольку мы тогда работаем с меньшим количеством данных.
Проблема
К сожалению, кажется, что когда-то Genson прочитал во всех областях через отражение или любой другой, он кэширует что. Это не было бы проблемой, если бы мы всегда запрашивали те же поля. К сожалению, в некоторых случаях нам нужно больше полей раньше, но поскольку Genson не посещает наш BeanMutatorAccessorResolver во второй раз, он возвращает только несколько полей, которые он уже кэшировал.
Есть в любом случае вокруг этого? Возможно, есть лучшее решение, чем отключение полностью - потому что это, скорее всего, повредит производительности, не так ли?
Update
Is кажется, что я нашел место, где это происходит. В основном Genson возвращает кешированный конвертер в Genson.provideConverter (Type forType) (строка: 154).
Converter<T> converter = (Converter<T>) converterCache.get(forType);
В верхней части метода я заметил, что он ищет __GENSON $ DO_NOT_CACHE_CONVERTER.
if (Boolean.TRUE.equals(ThreadLocalHolder.get("__GENSON$DO_NOT_CACHE_CONVERTER", Boolean.class))) {
Должен ли я установить это значение или есть лучшее решение?
К сожалению, добавление строки "ThreadLocalHolder.store (" __ GENSON $ DO_NOT_CACHE_CONVERTER ", true);" к моему ресурсу класса «Джерси», похоже, тоже не помогает. – michaeldd