2017-08-28 10 views
0

でフィールドをゼロにする(他の人の間では、しかし、それらは重要ではありません)。実際には1つはそのままパスワードを残す必要がありますパスワードフィールドなし 春データ残りは私は1つのエンティティのフィールド<em>パスワード</em>あり<em>ユーザー</em>とシナリオに直面していますHandleBeforeSave

  • PUTを提供されたパスワードを更新する必要がありますパスワードフィールドと

    1. PUT:私は2つのシナリオを処理します。

    最初のシナリオは正常に機能しますが、もう一方のシナリオでは解決策が見つかりません。このようなイベントハンドラーで試しました

    @HandleBeforeSave 
        fun handleUserUpdate(user: User) { 
         if (user.password == null || user.password == "") { 
          val storedUser = systemRunner.runInSystemContext { userRepository.findOne(user.id!!) } 
          user.password = storedUser.password 
         } else { 
          user.password = passwordEncoder.encode(user.password) 
         } 
        } 
    

    しかし、これは動作しません。 Spring DATA RESTは既に提供されているパラメータのフィールドをヌルにしています(同じJPAセッションにあるので、明らかに私はDBから同じ結果を得ます)。私はおそらくエンティティをリフレッシュするよう要求することができますが、その後私は他の変更を緩めるでしょうか?これを行う方法?両方のPUTとPATCH要求について、予想されるように私のJavaプロジェクトでは...すべての作品奇妙だ

  • +0

    ような何かを行うことができます。 https://docs.spring.io/spring-data/rest/docs/current/reference/html/#_put –

    答えて

    0

    @Component 
    @RepositoryEventHandler(User.class) 
    public class UserEventHandler { 
    
        @HandleBeforeSave 
        public void handleBeforeSave(User user) { // user: "User[id:1]" 
         //... 
        } 
    } 
    

    しかし、どのような権利Userクラスでパスワードをコードするでしょうか?例えば:私の意見では

    @Entity 
    public class User { 
    
        public static final PasswordEncoder ENCODER = new BCryptPasswordEncoder(); 
    
        //... 
    
        @PreUpdate 
        @PrePersist 
        private void encodePassword() { 
         password = !StringUtils.isEmpty(password) ? ENCODER.encode(password) : null; 
        } 
    } 
    

    それはREST層に依存does't原因このソリューションは良いです...

    +0

    しかし、私の質問は、存在していないフィールドをそのまま残しておいて、春をナルにする方法でしたか? – kboom

    0

    は、実際に私はanwserを見つけました。標準のコンテンツタイプjsonまたは "application/merge-patch + json"のいずれかのパッチを使用してください。あなたは、「アプリケーション/マージ・パッチ+ JSONを」パッチを適用する必要が

    { 
         "a": "b", 
         "c": { 
          "d": "e", 
          "f": "g" 
         } 
    } 
    

    にFフィールドをゼロと「Z」を重視するフィールドを更新すると述べているRFC specificationに従ってください

     { 
         "a":"z", 
         "c": { 
          "f": null 
         } 
         } 
    

    それとも、部分更新用PATCH https://docs.spring.io/spring-data/rest/docs/current/reference/html/#_patchと入れないため、この

    @Transient 
        var oldPassword: String? = null 
    
        @PostLoad 
        fun rememberOldUser() { 
         this.oldPassword = this.password; 
        } 
    
    関連する問題

     関連する問題