外部システムと連携するJavaアプリケーションでは、
想定外のコード値・不正な値・将来追加される値への対応が避けて通れません。
本記事では、
-
外部システムから受け取る「コード値」を
-
安全・堅牢・保守しやすく扱うための実践的な方法
を、実務でよくある失敗例 → 改善パターンの流れで解説します。
なぜ「コード値の扱い」が危険になりやすいのか
外部連携でよくあるコード値の例:
-
ステータスコード(
"0","1","9") -
種別コード(
"A","B","C") -
区分値(
"01","02")
❌ よくある危険な実装例
この書き方には以下の問題があります。
-
想定外の値(
"99"など)が来ても気づけない -
仕様変更時に修正箇所が増える
-
可読性・保守性が低い
-
null 安全性が弱い
基本方針:文字列のまま扱わない
結論から言うと、外部コード値はそのまま使わないのが鉄則です。
安全に扱うための基本原則は以下の3点です。
-
受信直後に変換する
-
意味を持つ型に閉じ込める
-
想定外の値を必ず検知する
方法①:enum による安全なマッピング(基本)
enum 定義例
使用例
✅ メリット
-
想定外の値を即検知できる
-
switch / if が読みやすい
-
IDE補完が効く
方法②:例外を投げたくない場合(Optional)
外部システム連携では「即例外にできない」ケースも多いです。
|
1 2 3 4 5 |
StatusCode.fromOptional(code) .ifPresentOrElse( s -> handleStatus(s), () -> log.warn("未知のコード値: {}", code) ); |
✅ 業務システム向きポイント
-
バッチ処理で止めない
-
ログ出力や代替処理がしやすい
方法③:enum を使わない「定数クラス」方式(実務向け)
※ 大規模・長期運用システムではこちらが好まれることも多いです
妥当性チェックを集中管理
✅ この方式が向いているケース
-
コード値がDB定義と1対1
-
enum 変更による影響を避けたい
-
運用側でコードが増減する可能性がある
方法④:Map を使った高速・拡張しやすい実装
✅ メリット
-
パフォーマンスが安定
-
コード追加時も安全
重要:null と空文字は「別物」として扱う
外部システムでは以下が頻出します。
-
null -
""(空文字) -
" "(半角スペース)
防御コード例
アンチパターンまとめ(避けるべき)
❌ マジックナンバー直書き
❌ String 比較が散らばる
❌ 想定外コードを無視
❌ コメントで仕様を補う
まとめ:安全に扱うためのチェックリスト
-
受信直後に型変換しているか
-
想定外の値を検知できるか
-
判定ロジックが一箇所に集約されているか
-
null / 空文字を区別しているか
外部システム連携では
「正しい値が来る前提」で書いたコードほど危険です。
コード値は必ず 閉じ込めて・検証して・意味を持たせる
これが、壊れにくいJavaシステムの基本です。
