はじめに
こんにちは、新卒2年目の岡崎です。
Interceptorを使用すると、コントローラーで処理を実行する前後に共通の処理を行うことができます。今回は、Spring BootでInterceptorを使う方法をご紹介します。
環境
openjdk version "21.0.2" 2024-01-16 LTS OpenJDK Runtime Environment Corretto-21.0.2.13.1 (build 21.0.2+13-LTS) OpenJDK 64-Bit Server VM Corretto-21.0.2.13.1 (build 21.0.2+13-LTS, mixed mode, sharing)
- Spring boot
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v3.2.1)
- gradle
------------------------------------------------------------ Gradle 8.5 ------------------------------------------------------------ Build time: 2023-11-29 14:08:57 UTC Revision: 28aca86a7180baa17117e0e5ba01d8ea9feca598 Kotlin: 1.9.20 Groovy: 3.0.17 Ant: Apache Ant(TM) version 1.10.13 compiled on January 4 2023 JVM: 21.0.2 (Amazon.com Inc. 21.0.2+13-LTS) OS: Mac OS X 12.3 aarch64
実装方法
最初に、Interceptorの作成を行います。Interceptorを作成する際には、HandlerInterceptorインターフェースを実装します。Interceptorでは、以下の三つのメソッドが実装できます。
preHandle
preHandleでは、コントローラーで処理を実行する前に割り込み、共通の処理を実行できます。
postHandle
postHandleでは、コントローラーで処理を実行した後に、共通の処理を実行できます。ただし、コントローラーで例外が発生した場合、処理は実行できません。
afterCompletion
afterCompletionでは、レスポンスが完了した後に、共通の処理を実行できます。コントローラーで例外が発生した場合でも、処理を実行できます。
以下は、全てのレスポンスにContent-Type
をtext/html; charset=utf-8
に設定する方法の例です。
まず、Interceptorの作成を行います。
@Configuration public class SampleInterceptor implements HandlerInterceptor { @Override public void postHandle( HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView ) throws Exception { response.setHeader("Content-Type", "text/html; charset=utf-8"); } }
Interceptorを登録するには、WebMvcConfigurer
インターフェースを実装するクラスを作成します。このクラスでaddInterceptors
メソッドをオーバーライドして、作成したInterceptorを登録します。
@Configuration @RequiredArgsConstructor public class WebMvcConfig implements WebMvcConfigurer { private final SampleInterceptor sampleInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(sampleInterceptor); } @Override public void configurePathMatch(PathMatchConfigurer configurer) { configurer.setUseTrailingSlashMatch(true); } }
全てのレスポンスにContent-Type
をtext/html; charset=utf-8
に設定できていたら、実装完了です。
最後に
Spring BootでInterceptorを使用する方法を紹介しました。コントローラーで毎回同じ処理を実装するのは効率的ではありませんし、どこかで間違いが生じる可能性もあります。そこで、こういった共通処理をInterceptorにまとめて実装する方法を検討してみてはいかがでしょうか。
また、エキサイトではフロントエンジニア、バックエンドエンジニア、アプリエンジニアを随時募集しております。長期インターンも歓迎していますので、興味があれば連絡いただければと思います。
募集職種一覧はこちらになります。