投稿日:
【SpringBoot2】レスポンスヘッダーに独自の項目を追加する方法【X-Request-ID】
YouTubeも見てね♪
ねこじゃすり
猫を魅了する魔法の装備品!
【最新機種】GoPro hero11 Black
最新機種でVlogの思い出を撮影しよう!
ペヤング ソースやきそば 120g×18個
とりあえず保存食として買っておけば間違いなし!
モンスターエナジー 355ml×24本 [エナジードリンク]
脳を活性化させるにはこれ!
ドラゴンクエスト メタリックモンスターズギャラリー メタルキング
みんな大好き経験値の塊をデスクに常備しておこう!
BANDAI SPIRITS ULTIMAGEAR 遊戯王 千年パズル 1/1スケール
もう一人の僕を呼び覚ませ!!
サンディスク microSD 128GB
スマホからSwitchまで使える大容量MicroSDカード!
目次
カスタムヘッダーも簡単に設定可能
SpringBootを使ってAPI開発をしている場合、簡単にレスポンスヘッダーへ独自項目を追加する事が可能です。
今回は以前の記事でログに含めるために発行したX-Request-ID
を、全リクエスト時のレスポンスヘッダーに自動で追加する方法をご紹介致します。
例えば、アプリから呼ばれるAPIなどのシステムの場合は、お問い合わせ時やシステムエラーのフィードバック時にサーバーから返ってきたX-Request-IDを含ませる事で、容易にサーバーログを絞る事が出来るためよりスピーディーにログ調査が行えます。
手順
OncePerRequestFilterを継承したFilterクラスを実装
まずは、前回のフィルターで発行されたX-Request-Id
をMDC
から取得し、レスポンスヘッダーに追加するFilterクラス
を実装しましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package tech.blogenist.service.account.api.infrastructure.filter.x_request_id;
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.MDC;
import org.springframework.web.filter.OncePerRequestFilter;
public class ResponseHeaderAddXRequestIdFilter
extends OncePerRequestFilter
{
@Override
protected void doFilterInternal( HttpServletRequest request, HttpServletResponse response, FilterChain filterChain )
throws ServletException, IOException
{
String xRequestId = MDC.get( MdcXRequestIdFilter.KEY );
response.setHeader( MdcXRequestIdFilter.KEY, xRequestId );
filterChain.doFilter( request, response );
}
}
|
ConfigurationクラスでBean定義
次に、前回作ったConfigurationクラス
にて新たにBeanとして追加しましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
package tech.blogenist.service.account.api.infrastructure.filter.x_request_id;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class XRequestIdFilterConfig
{
@Bean
public MdcXRequestIdFilter mdcXRequestIdFilter()
{
MdcXRequestIdFilter filter = new MdcXRequestIdFilter();
return filter;
}
//追加
@Bean
public ResponseHeaderAddXRequestIdFilter responseHeaderAddXRequestIdFilter()
{
ResponseHeaderAddXRequestIdFilter filter = new ResponseHeaderAddXRequestIdFilter();
return filter;
}
}
|
準備はこれだけです!
確認
では、実際に確認してみましょう。
1
2
3
4
5
6
7
8
9
10
|
#サーバーログ
[DEBUG] [23e55d17-7d0c-4a8c-82e6-256df17b670a] [2019-05-01 15:26:34.619] [o.h.engine.internal.TwoPhaseLoad] - Done materializing entity [tech.blogenist.service.account.entity.db.account.CurrentAccountInfomationsTableEntity#component[value]{value=10001}]
# レスポンスヘッダー
< HTTP/1.1 200
< x-request-id: 23e55d17-7d0c-4a8c-82e6-256df17b670a
< Content-Type: application/json;charset=UTF-8
< Transfer-Encoding: chunked
< Date: Wed, 01 May 2019 06:26:34 GM
|
サーバーログのX-Request-ID
とレスポンスヘッダーのX-Request-ID
の値が同じになっていますね♪
もちろん、独自エラーのスロー時やシステムエラー時にもレスポンスヘッダーに追加されているので調査が捗りそうです。
オススメの商品
終わりに
以上のように、簡単なクラスを追加するだけでログ調査が何倍もやりやすくなります。
何も仕込んでないログを漁るのは地獄なので、是非X-Request-ID
を仕込んでみてください♪