У меня настроен Джексон следующим образом.
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE);
objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
Таким образом, он сериализует только поля и функции, помеченные @JsonProperty
, и это именно то, что я хочу. Однако он использует java.lang.reflect.Field.get(bean)
для получения значений полей.
Я бы предпочел, чтобы Джексон использовал геттеры для доступа к значениям полей.
Есть ли способ, чтобы сделать это возможным?
Обновление
Я отладил вопрос и нашел
public void serializeAsField(Object bean, JsonGenerator gen,
SerializerProvider prov) throws Exception {
// inlined 'get()'
final Object value = (_accessorMethod == null) ? _field.get(bean)
: _accessorMethod.invoke(bean, (Object[]) null);
в BeanPropertyWriter
. _accessorMethod
равно нулю.
Обновление 2
Это один из классов, которые я хочу сериализовать.
import lombok.Data;
@Data
public class JwtAuthenticationResponse{
private final String token;
}
Получатель сгенерированный с использованием аннотации @Data от lombok.
Обновление 3
Я отладил дальше и получил POJOPropertiesCollector._removeUnwantedAccessor(props)
.
Он удаляет ранее нашел аксессор из-за его видимости, который был определен с objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE);
.
Поскольку я использую lombok, я не могу использовать какие-либо аннотации @ Json*** на геттерах. Вот почему я решил использовать только поля, чтобы определить свойства, которые будут сериализованы. Но я всегда хотел использовать их соответствующие получатели в качестве средства доступа к значениям.
Есть ли способ сделать это?