2017-08-23 2 views
0

私は@Validatedで注釈が付けられたサービスクラスを持っています。 このクラスでは、@Validで注釈を付けられた引数を持つメソッドがあります。 引数が有効でない別のクラスインスタンスからメソッドが呼び出された場合、例外がスローされます。 予想通り、タイプConstraintViolationExceptionのエラーがスローされます。Springサービスメソッドのバリデーション

このメソッドを別のサービスメソッド(内部呼び出し)から呼び出すと、検証は行われず、メソッド本体にエラーが発生します。 これは私が望むものではありません。明らかに、内から発信された通話は検証されません。 問題を調べると、メソッドがSpringプロキシBeanを使用して呼び出されていないことがわかりました。 Iは(@Autowired)アプリケーションコンテキストからプロキシを取得することによって問題を修正し、プロキシを使用してメソッドを呼び出す:

((T) context.getBean(this.getClass()).myMethod(validatedArgument) 

これは醜いソリューションです。 内部からのメソッド呼び出しが有効になるようにSpringを設定するにはどうすればよいですか?

答えて

0

サービスを自力で自動配線する方法があります。

@Service 
public class MyService { 

    @Autowired 
    private MyService copy; 

    private void call() { 
    //myMethod(validatedArgument); 
    copy.myMethod(validatedArgument); 
    } 
} 
+0

残念ながら、Springではこれを許可していません。 –

0

Springの処理方法は、1つのインスタンスが別のインスタンスにメッセージを送信するときにのみ呼び出されるようなものです。これを克服するにはいくつかの方法がありますが、あなたのケースでは、それをやりたいという事実はおそらく設計上の欠陥を明らかにするでしょう。

関連する問題