実現したいこと
- コントローラー毎に実行する共通処理を分けたい
springで共通処理を行う方法は、インターセプターやcontrollerAdviceなどありますが、どれもすべてのコントローラーを対象としたものになっています。
コントローラー毎に共通処理(事前処理)を分ける方法はあるのでしょうか。
試したこと
- インターセプターを使う。
参考:https://qiita.com/dmnlk/items/cce551ce18973f013b36
インターセプターでは、実行するコントローラーのアノテーションを取得できるので、
各コントローラーに独自アノテーションを付け、それをもとに実行する事前処理を判定する。
→共通処理の分だけ条件分岐を作る必要がある。新たに共通処理を作成したら、インターセプタークラスに条件分岐を追加しないといけない。
- @ModelAttributeを使う
@ModelAttributeを付けたメソッドは、RequestMappingしたメソッドの直前に呼ばれます。
このアノテーションを付けたメソッドを単独のクラスとして作成し、これを各コントローラーが継承することで、同じ処理を複数のコントローラーで実行できる。
→本来の使い方では無さそう
ソースコード
- インターセプターを使用
SampleInterceptor.java
1public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 2 3 HandlerMethod hm = (HandlerMethod) handler; 4 Method method = hm.getMethod(); 5 CommonProc annotation = AnnotationUtils.findAnnotation(method, CommonProc.class); 6 if (annotation != null) { 7 log.info(String.format("exclude login check %s", requestURI)); 8 return true; 9 }
SampleController.java
1@CommonProc 2@RequestMapping("/hello") 3public String hello(){ 4(何かしらの処理) 5}
2.ModelAttributeを使う
CommonProcess.java
1@ModelAttribute 2public void beforeProc(){ 3(何かしらの処理) 4}
TestController.java
1public class TestController extends CommonProcess{ 2(何かしらの処理) 3}
補足情報
spring framework 4.3.21

あなたの回答
tips
プレビュー