これは多くのエラー処理シナリオに適用できますが、ログインシナリオでそれを行う方法に興味があります。
このSpringコントローラーメソッドを考えると:
@RequestMapping(value = "/account/login", method = RequestMethod.POST)
public String login(@RequestParam("username") String aUsername,
@RequestParam("password") String aPassword,
Model model)
{
try {
accountService.login(aUsername, aPassword);
} catch (LoginException e) {
// log e
// add an error to request scope
model.addAttribute("error", e.getMessage);
return "login"; // return to login page
}
// success, show profile
return "redirect:profile";
}
そして、login.htmlフォーム(私はthymeleafを使用していますが、jsp
と同様のロジックに従ってください):
<!-- This is saying, if ${error} is set, use it instead of the content of p, `No error` -->
<p th:if="${error}" th:text="${error}">No error</p>
<form method="post" action="#" th:action="@{/account/login}">
Username: <input name="username" type="text" />
Password: <input name="password" type="text" />
<input name="login" type="submit" value="Login" />
</form>
これは、Java Webアプリケーションで通常エラー処理が行われる方法ですか?エラーが発生する可能性がある場合はどこでも、異なるif
sを使用して分岐しますか?よりクリーンな、またはより一般的な方法はありますか?これをする?
エラー処理とユーザーへの表示は、UIの設計とユーザーがどのように表示したいかによって異なります。モバイルでの表示とデスクトップでの表示は異なる場合があります。
私が知っていることは、これらのエラーを分類することも重要です。検証エラー、セキュリティアクセスエラー、重大なエラー(データベースの例外、予期しない例外)があります。また、カテゴリごとに、重大なエラーなどの異なるアプローチを設計したり、すべての重大なエラーをキャッチする専用ページを使用したりできます。検証エラーの場合は、ユーザーが無効なデータを入力したページと同じページに表示し、修正するフィールド/入力などがすぐに認識されることをメッセージで明確に示す必要があります。
エラーの表示は、常にユーザーフレンドリーで、直接的で適切でなければなりません。