2016-10-29 15 views
1

私はdropwizard + morphia + jackson(dropwizardのデフォルト)の組み合わせを使用しようとしていますが、@JsonIgnoreまたは@JsonIgnorePropertiesを動作させることはできません。私は@JsonIgnorePropertiesを私のAPIのコンシューマに公開したくないプロパティのクラス定義よりも試してみました。また、フィールド宣言自体やgetterのすべての順列に対して、@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を持っています。それは、morphiaのBasicDAOを拡張しています。それが役に立つなら、そのコードのスニペットを投稿することができます。

+0

コードを投稿する可能性がありますか? – Tibrogargan

答えて

2

パスワードと塩の両方が、@JsonPropertyとラベル付けされています。これは、セッターとゲッターの無視よりも優先されます。 JsonPropety注釈を削除(またはJsonIgnoreで置き換える)した場合、無視するフィールドは実際に無視されます。

+0

はい、そうです。私は '@ JsonProperty'についてもっと読む必要があると思います。 パスワードの更新にPUTを許可するようなフォローアップの質問があります(必要な場合は新しい質問に投稿できます)。すなわち、私はパスワードを変更する要求がある場合、私は要求から生のパスワードを取って、それをハッシュし、塩にし、それを維持する必要があります。これは現在の設定で起こるでしょうか? – Justin

+3

JsonPropertyとJsonIgnoreでセッターにラベルを付けることでオブジェクトを非対称にすることができるはずですが、フィールドにはまだJsonIgnoreというラベルが付いている必要があります(http://www.davismol.net/2015/03/21/ jackson-using-jsonignore-and-jsonproperty-annotations-to-exclude-from-json-deserialization /) –

+0

あなたの助けてくれてありがとう! – Justin

関連する問題