2017-05-03 10 views
0

SpringのMVCでコントローラメソッドをインターセプトし、Springフレームワークが渡した指定のパラメータでフィーリングする方法はありますか?Spring MVCでコントローラメソッドをインターセプトする方法と、渡されたパラメータでフィドリングする方法はありますか?

@PostMapping(consumes = "multipart/form-data") 
public ResponseEntity<?> createPerson(CreatePersonCommand command) { 

    // ... 
} 

私は私のcreatePersonメソッドが呼び出される前に、コマンドオブジェクトをいじることができるようにしたいです。私は、追加のパラメータを設定したいので、言うことができます(例えば、タイムスタンプ、...)

更新:

私はHandlerIntercaptor &アダプタを認識しています。しかし、私はまだCreatePersonCommandオブジェクトpreHandleの方法で私は周りをぐるぐることができます知りません。

@Override 
public boolean preHandle(
    HttpServletRequest request, HttpServletResponse response, Object handler) 
    throws Exception { 

    // FIDDLE WITH CreatePersonCommand ??? 

    return true; 
} 

答えて

1

Springでは、側面を使用することができます。例を挙げると、次のようになります。

@Aspect 
@Component 
public class PreHandlerAspect { 

    @Before("execution(* com.your.controller..*Controller.*(..))) 
    public void beforeController(JoinPoint joinPoint){ 
     //Here your code 
     //You could access to the request, parameters, add the aspect for just 1 controller, many,... 
    } 
} 
+0

あなたの提案をありがとう!私は、Spring MVCがすぐに使用できるソリューションに似ていることを期待していました。私はアスペクトでプレーします:) – Dachstein

1

あなたはインターセプタ、メソッドpreHandle()を使用することができます。 https://www.mkyong.com/spring-mvc/spring-mvc-handler-interceptors-example/

アップデート:私は正確にどのように行うのか分からないけど、あなたのハンドラ・オブジェクトを使用しようとすることができます

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler){ 
    ((HandlerMethod)handler).getMethodParameters()... 
} 

あなたの最終的な解決策を教えてください:)

+0

ありがとう@NikNik、しかし私の更新を参照してください。 – Dachstein

+0

@ Niki私はハンドラを使って既に正しく演奏し始めましたが、 "getMethodParameters"メソッドは実際のパラメータ値を取得できないJavaのリフレクションにつながっているようです。しかし、私はもっと掘る必要があります! – Dachstein

+0

@ニキ私は、このソリューションをアスペクトとして実装しました。その魅力のように働く! :) – Dachstein

関連する問題