2016-10-29 9 views
1

Я пытаюсь использовать комбинацию dropwizard + morphia + jackson (по умолчанию dropwizard), но я не могу получить @JsonIgnore или @JsonIgnoreProperties для работы. Я пробовал @JsonIgnoreProperties над определением класса для свойств, которые я не хочу показывать (пароль и соль) для пользователей моего API, я также пробовал @JsonIgnore над самими объявлениями полей, а также над каждой перестановкой геттеров и сеттер ... Теперь в убыток.Jackson и JsonIgnore, чтобы скрыть секретные поля

редактировать: вот модель:

@Entity(value = "user", noClassnameStored = true) 
@Indexes({ 
    @Index(fields = { 
     @Field(value = "email", type = IndexType.ASC)}, 
     options = @IndexOptions(unique = true, sparse = true) 
    ) 
}) 
public class User { 
    @Id 
    private ObjectId id = new ObjectId(); 
    @JsonProperty 
    private String email; 
    @JsonProperty 
    private byte[] password; 
    @JsonProperty 
    private byte[] salt = SecurityUtils.getSalt(); 
    @Reference 
    private Person person = new Person(); 

    public String getId() { 
    return id.toHexString(); 
    } 

    public void setId(ObjectId id) { 
    this.id = id; 
    } 

    public String getEmail() { 
    return email; 
    } 

    public void setEmail(String email) { 
    this.email = email; 
    } 

    @JsonIgnore 
    public byte[] getPassword() { 
    return password; 
    } 

    @JsonIgnore 
    public void setPassword(String password) { 
    this.password = SecurityUtils.hashPassword(password.toCharArray(), this.getSalt()); 
    } 

    @JsonIgnore 
    public byte[] getSalt() { 
    return salt; 
    } 

    @JsonIgnore 
    public void setSalt(byte[] salt) { 
    this.salt = salt; 
    } 

    public Person getPerson() { 
    return person; 
    } 

    public void setPerson(Person person) { 
    this.person = person; 
    } 
} 

В дополнение к вышесказанному я попытался определения класса с использованием @JsonIgnoreProperties({"password", "salt"} public class User..., а также с @JsonIgnore только над геттеры, сеттеры и т.д.

Я использую morphia v1.2.1 для сохранения. Сейчас у меня есть базовый DAO, который расширяет BasicDAO от morphia и в основном просто проксирует на данный момент. Может публиковать фрагменты кода, если это поможет.

+0

Возможно, вы сможете оставить свой код? – Tibrogargan

ответ

2

пароль и соль обозначаются как @JsonProperty, который имеет преимущество перед игнорированием на сеттере и геттере. Я думаю, что если вы удалите аннотацию JsonPropety (или замените ее на JsonIgnore), те поля, которые вы хотите проигнорировать, будут фактически проигнорированы.

+0

Да, ты прав. Думаю, мне нужно больше узнать о '@ JsonProperty'. У меня есть следующий вопрос (который я могу опубликовать на новый вопрос, если это необходимо), который должен был бы разрешить PUT для обновлений паролей. то есть. если я получу запрос на изменение пароля, мне нужно будет взять необработанный пароль из запроса, хеш его, соль и сохранить его. Это произойдет с этой текущей конфигурацией? – Justin

+3

Вы должны иметь возможность сделать объект асимметричным, помещая метку с помощью JsonProperty и getter с JsonIgnore, но поле по-прежнему должно быть помечено JsonIgnore (см. Http://www.davismol.net/2015/03/21/ jackson-using-jsonignore-and-jsonproperty-annotations-to-exclude-a-property-only-from-json-deserialization /) –

+0

Огромное спасибо за вашу помощь! – Justin

 Смежные вопросы

  • Нет связанных вопросов^_^