JavaのServletからModelクラスを呼び出すには?入力値を渡して処理結果を受け取る方法|確認問題の回答例

このページは、JavaのServletからModelクラスを呼び出すには?入力値を渡して処理結果を受け取る方法の確認問題の回答例です。各問題は本文の元の仕様から独立して考えます。
問題1:12,000円を送ったときの値
| 段階 | 型と値 |
|---|---|
| getParameterで取得 | String型の文字列 “12000” |
| Modelの引数へ渡す | int型の12000 |
| Modelの戻り値 | int型の500 |
| Servletのdiscount | int型の500 |
getParameterで受け取った文字列をintに変換してから渡します。戻り値は支払金額11,500ではなく割引額500です。Servletのamountは12,000のままであり、戻り値をdiscountに受け取ります。
問題2:割引条件と割引額を変更する
DiscountModelの負の値を拒否する処理は残し、その後の判定部分を次のように変えます。
if (amount >= 15000) {
return 800;
}
return 0;
14,999円は0、15,000円は800が返ります。メソッド名・引数・戻り値の型は変わらないため、本文のServletの呼び出しとJSPの数値表示はそのまま使えます。条件を説明する文言やテストの期待値も、新しい仕様に合わせて確認します。
問題3:戻り値を受け取って表示側へ渡す
int discount = model.calculateDiscount(amount);
request.setAttribute("discount", discount);
元の2行では、戻り値を受け取らずに0をrequestへ入れていました。修正後はModelが返した500をdiscountに代入し、その値をJSPへ渡します。Model内でprintlnを書き足す修正ではありません。
問題4:不正な入力をどこで扱うか
| 入力 | 問題を見つける場所 | Modelを呼ぶか |
|---|---|---|
| 未入力 | Servletのtext == nullまたはtext.isBlank() | 呼ばない。 |
| abc | ServletのInteger.parseIntでNumberFormatExceptionが起きる | 呼ばない。数値への変換が完了しないため。 |
| -1 | Modelのamount < 0でIllegalArgumentExceptionを投げる | 呼ぶ。-1は整数へ変換できるが、Modelの受け付ける条件に合わない。 |
Modelが通知したIllegalArgumentExceptionはServletがcatchし、固定のエラーメッセージをJSPへ渡します。ブラウザの入力欄で通常は送信が止まる場合でも、サーバー側にその値が届いたケースとして考えます。