У меня есть объект пользователя, который отправляется на сервер и с сервера. Когда я отправляю объект пользователя, я не хочу отправлять хешированный пароль клиенту. Итак, я добавил @JsonIgnore
свойство пароля, но это также блокирует его десериализацию в пароль, что затрудняет регистрацию пользователей, когда у них нет пароля.
Как я могу получить только @JsonIgnore
применить к сериализации, а не десериализации? Я использую Spring JSONView, поэтому у меня нет тонны контроля над ObjectMapper
.
Вещи, которые я пробовал:
- Добавить
@JsonIgnore
в собственность - Добавьте
@JsonIgnore
только метод получения
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
Для этого нам нужны только две аннотации:
@JsonIgnore
@JsonProperty
Используйте
@JsonIgnore
на члене класса и его получателе, и@JsonProperty
на его установщике. Пример иллюстрации поможет сделать это:источник
Начиная с версии 2.6: более интуитивным способом является использование
com.fasterxml.jackson.annotation.JsonProperty
аннотации на поле:Даже если геттер существует, значение поля исключается из сериализации.
JavaDoc говорит:
Если вам нужно наоборот, просто используйте
Access.READ_ONLY
.источник
В моем случае Джексон автоматически (де) сериализует объекты, которые я возвращаю из контроллера Spring MVC (я использую @RestController с Spring 4.1.6). Пришлось использовать
com.fasterxml.jackson.annotation.JsonIgnore
вместо тогоorg.codehaus.jackson.annotate.JsonIgnore
, чтобы иначе ничего не делалось.источник
источник
Другой простой способ справиться с этим - использовать аргумент
allowSetters=true
в аннотации. Это позволит десериализовать пароль в вашем dto, но не будет сериализовать его в тело ответа, которое использует содержащий объект.пример:
Оба
foo
иbar
заполняются в объекте, но в тело ответа записывается только foo.источник