スプリングブートで使用するたびにBeanオブジェクトの状態を破棄またはクリアする方法

存在;

私は春のブーツの初心者で、@ Beanを使用してBeanを作成し、@ Autowiredを使用して必要な場所にいつでもそのBeanにアクセスしようとしています。しかし、@ Beanはデフォルトでシングルトンであり、その状態を保存しますが、その状態をクリアして、新しく追加された新しいデータまたは追加されたデータがない場合はnullを与えるようにします。親切に私を助けてください。そして、私は自動配線されたBeanを使用して正しいコーディング標準に従っていることも知りたいので、すべてのAPIに同様のタイプの応答を与えたいので、ポージョを作成し、それをBeanにして、オブジェクトを何度も作成します。私の問題がばかげている場合は申し訳ありません。事前に感謝します

これは私のメインクラスです

@SpringBootApplication
public class GyftiV2Application {

    public static void main(String[] args) {
        SpringApplication.run(GyftiV2Application.class, args);
    }
    @Bean
    public ResponseData getResponse() {
        return new ResponseData();
    }
}

以下はポージョです

public class ResponseData {

    private boolean responce;
    private String error;
    private List<?> data = new ArrayList<>();

    public ResponseData() {
    }

    public boolean isResponce() {
        return responce;
    }

    public void setResponce(boolean responce) {
        this.responce = responce;
    }

    public String getError() {
        return error;
    }

    public void setError(String error) {
        this.error = error;
    }

    public List<?> getData() {
        return data;
    }

    public void setData(List<?> data) {
        this.data = data;
    }
}

以下は私の豆が使われているサービスです

@Service
public class UserServiceImpl implements UserService {

@Autowired
private ResponseData resData;

@Autowired
private UserRepository userRepository;

public ResponseData changePassword(PasswordChange pass) {
    User user = userRepository.getOne(pass.getUserId());
    if (null != user) {
        if (pass.getOldPassword().equals(user.getUser_password())) {
            if ((pass.getNewPassword().trim()).equals(pass.getConfirmPassword().trim())) {
                user.setUser_password(pass.getNewPassword());
                userRepository.save(user);
                resData.setResponce(true);
                resData.setData(Collections.singletonList("Password change successfully"));
                return resData;
            } else {
                resData.setResponce(false);
                resData.setError("Please write the same new password in the confirm section");
                return resData;
            }
        } else {
            resData.setResponce(false);
            resData.setError("Please write the correct old password");
            return resData;
        }
    } else {
        resData.setResponce(false);
        resData.setError("Something went wrong userId is not correct");
        return resData;
    }
}

}

コントローラー付き

@RestController
@RequestMapping("/user")
public class UserController {

@Autowired
private UserService userService;

@PostMapping(value = "/changePassword")
    public ResponseEntity<ResponseData> changePassword(@RequestBody PasswordChange pass) {
        ResponseData response = userService.changePassword(pass);
        if (response.isResponce()) {
            return new ResponseEntity<>(response, HttpStatus.OK);
        }
        return new ResponseEntity<>(response, HttpStatus.BAD_REQUEST);
    }

}

しかし、同じnewPassowordとconfirmPasswordを渡さなかった場合は、応答が返されました

{
  "responce": false,
  "error": "Please write the same new password in the confirm section",
  "data": []
}

そして、すべてを正しく渡すと、応答が得られました

{
  "responce": true,
  "error": "Please write the same new password in the confirm section",
  "data": [
    "Password change successfully"
  ]
}

resDataがその状態を保存していることがはっきりとわかります。そのため、エラーキーがまだ存在しています。エラーフィールドに「」を渡せばこの問題は解決しますが、@ Beanの状態をクリアする理由はありますか?助けてくれてありがとう。

RUARO Thibault:

コメントで述べたように、これをBeanとして使用するべきではありません...これは単なる通常のオブジェクトです。

サービスコードは次のようになります。

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;

    public ResponseData changePassword(PasswordChange pass) {
        User user = userRepository.getOne(pass.getUserId());
        if (null != user) {
            if (pass.getOldPassword().equals(user.getUser_password())) {
                if ((pass.getNewPassword().trim()).equals(pass.getConfirmPassword().trim())) {
                    user.setUser_password(pass.getNewPassword());
                    userRepository.save(user);
                    ResponseData resData = new ResponseData();
                    resData.setResponce(true);
                    resData.setData(Collections.singletonList("Password change successfully"));
                    return resData;
                } else {
                    ResponseData resData = new ResponseData();
                    resData.setResponce(false);
                    resData.setData("Please write the same new password in the confirm section");
                    return resData;
                }
            } else {
                ...
            }
        } else {
            ...
        }
    }
}

考慮すべき事柄:

  • サービスを使用して、クライアントに直接送信されたResponseDateオブジェクトを返すことはできません。たぶん、あなたのサービスで例外を使用してくださいPasswordAndConfirmationAreDifferentExceptionこのようにして、コントローラーで必要な方法を処理するのが簡単になります。
@RestController
@RequestMapping("/user")
public class UserController {

@Autowired
private UserService userService;

@PostMapping(value = "/changePassword")
    public ResponseEntity<ResponseData> changePassword(@RequestBody PasswordChange pass) {
        try {
            userService.changePassword(pass);
            ResponseData resData = new ResponseData();
            resData.setResponce(true);
            resData.setData(Collections.singletonList("Password change successfully"));
            return new ResponseEntity<>(resData, HttpStatus.OK);
        } catch (PasswordAndConfirmationAreDifferentException e) {
            ResponseData resData = new ResponseData();
            resData.setResponce(false);
            resData.setData("Password incorrect");
            return new ResponseEntity<>(resData, HttpStatus.BAD_REQUEST);
        }
    }
}
  • Builderを使用して、タイプError ResponseData.Error("my error")およびタイプDataのresponseDateを簡単に作成しますResponseData.Data( "my message 1"、 "my message2"、...)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Pythonオブジェクトは、nginxでリクエストするたびに状態を失います

分類Dev

AMDおよびBackboneを使用してモジュール間でオブジェクト(または状態)を共有するクリーンな方法

分類Dev

リクエストオブジェクトの破棄を制御するためのオプション

分類Dev

メモリリーク、および実行可能なクラスの奇妙なバグ-オブジェクトを適切に破棄する方法は?

分類Dev

Railsでオブジェクトをフィルタリングして、オブジェクトを作成したユーザーまたは管理者だけがそのオブジェクトを破棄できるようにするにはどうすればよいですか?

分類Dev

エラー:破棄されたオブジェクトにアクセスできません。このエラーの一般的な原因は、依存性注入から解決されたコンテキストを破棄することです

分類Dev

IDisposableオブジェクトは、RequestContainerを使用したナンシーリクエストの最後に破棄されますか?

分類Dev

オブジェクト/状態をアプリケーション全体/すべてのフラグメントに送信する方法は?

分類Dev

'破棄されたオブジェクトにアクセスできません。このエラーの一般的な原因は、依存性注入から解決されたコンテキストを破棄することです

分類Dev

アプリケーションを終了するときにオブジェクトを破棄するのはなぜですか?

分類Dev

Inno SetupPascalスクリプトでオブジェクトを破棄する

分類Dev

Vuex状態のオブジェクトのプロパティをクリアするための最良の方法は何ですか

分類Dev

Next.jsアプリでReactコンテキストを使用しながら、ある状態オブジェクトから別の状態オブジェクトにデータを転送する

分類Dev

非同期リポジトリパターンの使用-破棄されたオブジェクトにアクセスできません

分類Dev

ラジオボタンをクリアする方法/選択したすべてのラジオボタンを偽の状態にクリアします。reactjs-ブートストラップ

分類Dev

C ++を使用したオブジェクト指向プログラミングで再帰を使用してリンクリストを逆にする方法は?

分類Dev

オブジェクトのリストを破棄する方法;メモリを解放しますか

分類Dev

オブジェクトを初期状態にリセットするためのパターン

分類Dev

ドットまたはブラケット表記を使用して、フェッチ後に状態に保存されたjson / javascriptオブジェクトのキーまたはデータにアクセスすることはできません

分類Dev

Delphiアプリでメモリリークが発生しました。オブジェクトと文字列を適切に破棄するにはどうすればよいですか?

分類Dev

状態がオブジェクトのオブジェクトである場合、コンポーネントは再レンダリングされます

分類Dev

ステータス=承認または拒否のオブジェクトを特定のテンプレートで個別にレンダリングする

分類Dev

Unity:レンダリングが終了した後にVFXオブジェクトを破棄します

分類Dev

マルチスレッドサーバーは、複数のクライアントが接続しようとすると、「破棄されたオブジェクトにアクセスできません」というエラーを表示します

分類Dev

* this = Ctor(); オブジェクトの状態をクリアするための合法かつ効率的ですか?

分類Dev

デスクトップの背景に描かれたオブジェクトをクリアする方法は?

分類Dev

グローバル オブジェクトは、すべてのスレッド ローカル ストレージ オブジェクトが破棄された後に破棄されることが保証されていますか?

分類Dev

アプリケーションオブジェクトに将来の状態を保存する

分類Dev

計算されたオブジェクトプロパティ名を使用したネストされたオブジェクトの破棄-反応状態

Related 関連記事

  1. 1

    Pythonオブジェクトは、nginxでリクエストするたびに状態を失います

  2. 2

    AMDおよびBackboneを使用してモジュール間でオブジェクト(または状態)を共有するクリーンな方法

  3. 3

    リクエストオブジェクトの破棄を制御するためのオプション

  4. 4

    メモリリーク、および実行可能なクラスの奇妙なバグ-オブジェクトを適切に破棄する方法は?

  5. 5

    Railsでオブジェクトをフィルタリングして、オブジェクトを作成したユーザーまたは管理者だけがそのオブジェクトを破棄できるようにするにはどうすればよいですか?

  6. 6

    エラー:破棄されたオブジェクトにアクセスできません。このエラーの一般的な原因は、依存性注入から解決されたコンテキストを破棄することです

  7. 7

    IDisposableオブジェクトは、RequestContainerを使用したナンシーリクエストの最後に破棄されますか?

  8. 8

    オブジェクト/状態をアプリケーション全体/すべてのフラグメントに送信する方法は?

  9. 9

    '破棄されたオブジェクトにアクセスできません。このエラーの一般的な原因は、依存性注入から解決されたコンテキストを破棄することです

  10. 10

    アプリケーションを終了するときにオブジェクトを破棄するのはなぜですか?

  11. 11

    Inno SetupPascalスクリプトでオブジェクトを破棄する

  12. 12

    Vuex状態のオブジェクトのプロパティをクリアするための最良の方法は何ですか

  13. 13

    Next.jsアプリでReactコンテキストを使用しながら、ある状態オブジェクトから別の状態オブジェクトにデータを転送する

  14. 14

    非同期リポジトリパターンの使用-破棄されたオブジェクトにアクセスできません

  15. 15

    ラジオボタンをクリアする方法/選択したすべてのラジオボタンを偽の状態にクリアします。reactjs-ブートストラップ

  16. 16

    C ++を使用したオブジェクト指向プログラミングで再帰を使用してリンクリストを逆にする方法は?

  17. 17

    オブジェクトのリストを破棄する方法;メモリを解放しますか

  18. 18

    オブジェクトを初期状態にリセットするためのパターン

  19. 19

    ドットまたはブラケット表記を使用して、フェッチ後に状態に保存されたjson / javascriptオブジェクトのキーまたはデータにアクセスすることはできません

  20. 20

    Delphiアプリでメモリリークが発生しました。オブジェクトと文字列を適切に破棄するにはどうすればよいですか?

  21. 21

    状態がオブジェクトのオブジェクトである場合、コンポーネントは再レンダリングされます

  22. 22

    ステータス=承認または拒否のオブジェクトを特定のテンプレートで個別にレンダリングする

  23. 23

    Unity:レンダリングが終了した後にVFXオブジェクトを破棄します

  24. 24

    マルチスレッドサーバーは、複数のクライアントが接続しようとすると、「破棄されたオブジェクトにアクセスできません」というエラーを表示します

  25. 25

    * this = Ctor(); オブジェクトの状態をクリアするための合法かつ効率的ですか?

  26. 26

    デスクトップの背景に描かれたオブジェクトをクリアする方法は?

  27. 27

    グローバル オブジェクトは、すべてのスレッド ローカル ストレージ オブジェクトが破棄された後に破棄されることが保証されていますか?

  28. 28

    アプリケーションオブジェクトに将来の状態を保存する

  29. 29

    計算されたオブジェクトプロパティ名を使用したネストされたオブジェクトの破棄-反応状態

ホットタグ

アーカイブ