Для десериализации и сериализации использую библиотеку Jackson. Иногда на практике встречаюсь с требованием прописать сеттеры для класса сущности, т.к. десериализация не хочет работать. От модификатора доступа это не зависит. Зачем Jackson иногда это требует если он использует рефлексию?
class Example {
private String field;
}
...
String json = "{\"field\": \"test\"}";
ObjectMapper mapper = new ObjectMapper();
Example example = mapper.readValue(json, Example.class);
Да по умолчанию Jackson использует геттеры и сеттеры для сериализации и десериализации, однако как он только не конфигурируется.
Если Вы инициализируете ObjectMapper вот так, то он будет использовать поля:
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibilityChecker(mapper.getSerializationConfig().getDefaultVisibilityChecker()
.withFieldVisibility(JsonAutoDetect.Visibility.ANY)
.withGetterVisibility(JsonAutoDetect.Visibility.NONE)
.withSetterVisibility(JsonAutoDetect.Visibility.NONE)
.withCreatorVisibility(JsonAutoDetect.Visibility.NONE));
Продвижение своими сайтами как стратегия роста и независимости