前→https://qiita.com/19960417akiho/items/4f89cf51b69125c4cdc9
以下の動画を参考に、ハンズオン形式でSpring BootでWebアプリを制作していきます。
今回はPart11。
エラーメッセージをプロパティファイルで一元管理できるようにします。
まずは、src/main/resorces下に、エラーメッセージを管理するファイルを作ります。
ファイル名は必ずmessages.properties
でないといけません。
このファイルに、キーと値という形式でメッセージを管理していきます。
以下の通りです。
messages.properties
login.wrongInput = ログインIDとパスワードの組み合わせが間違っています。
今回は、ログイン失敗時のメッセージをこのファイルから引っ張ってきて表示するような実装を行います。
ファイル作成の次は、messages.properties
からログインエラーメッセージを引っ張ってくるためのクラスを作成します。
utilパッケージを新しく追加し、その中にAppUtil.javaというクラスを作成します。
AppUtil.java
public class AppUtil {
/**
* メッセージIDからメッセージを取得する。
*
* @param messageSource メッセージソース
* @param key メッセージキー
* @param params 置換文字群
* @return メッセ――ジ
*/
public static String getMessage(MessageSource messageSource,String key,Object... params) {
return messageSource.getMessage(key, params,Locale.JAPAN);
}
}
AppUtilクラス内でgetMessageメソッドを定義しています。
このメソッドは、引数にMessageSource型のmessageSourceとString型のkey,そしてObject型のパラメータをいくつも持つことができる可変長引数が定義されています。
retrunで返すものは、MessageSourceインターフェースが持つメソッドの一つであるgetMessageメソッドにkeyやパラメータの情報を与えたものです。
なぜ、getMessageメソッド内でgetMessageメソッドを使ってるんだろうと思いましたが、
AppUtilクラス内のgetMessageメソッドと、MessageSourceインターフェースの持つgetMessageメソッドは名前は一緒ですが全く別物なので大丈夫なようです。
MessageSourceインターフェースのgetMessageメソッドは、messages.propertiesファイルからメッセージを持ってくるメソッドです。
引数のkeyは、ファイルに用意したlogin.wrongInputなどのことです。
paramはパラメータを使うことで、messages.propertiesに用意したメッセージの一部を変更することができます。(今回は使っていません)
Locale.JAPANは、日本語のメッセージをもってくるよーという指定です。
それでは、AppUtilクラスのgetMessageメソッドをLoginController内で使ってみましょう。
LoginControlle.java
/** メッセージソース */
private final MessageSource messageSource;
/**
* ログイン
* @param modelモデル
* @param form入力情報
* @return 表示画面
*/
@PostMapping("/login")
public String login(Model model, LoginForm form) {
var userInfo = service.searchUserById(form.getLoginId());
var isCorrectUserAuth = userInfo.isPresent()
&& passwordEncoder.matches(form.getPassword(), userInfo.get().getPassword());
if(isCorrectUserAuth) {
return "redirect:/menu";
}else {
var errorMsg = AppUtil.getMessage(messageSource, ErrorMessageConst.LOGIN_WRONG_INPUT);
model.addAttribute("errorMsg",errorMsg);
return "login";
}
}
まず、お馴染みのprivate final MessageSource messageSource;
でログインコントローラー内にMessageSourceのフィールドを作っといてあげます。
これで、MessageSourceインターフェースの持つメソッドをつかうことができます。
それでは、変数erroroMsg
の定義をみましょう。
var errorMsg = AppUtil.getMessage(messageSource, ErrorMessageConst.LOGIN_WRONG_INPUT);
AppUtil
クラスのgetMessage
メソッドを利用しています。
引数にmessageSource
とErrorMessageConst.LOGIN_WRONG_INPUT
を持っています。
説明しわすれていましたが、ErrorMessageConst.LOGIN_WRONG_INPUT
はもともとはmessages.properties
ファイルのキーであるlogin.wrongInput
でした。
しかし、引数としてlogin.wrongInput
を渡すのはハードコーディングにってよくないので、キーだけを管理するクラスを作って、そこから間接的に持ってきています。
つまり、ErrorMessageConst.LOGIN_WRONG_INPUT
はlogin.wrongInput
ってことです。
これでログインに失敗したときはmodel
に"errorMsg",errorMsg
が追加されmessages.properties
内の文言を持ってきてくれます。
最後に、ErrorMessageConst
クラスも載せときます。
ErrorMessageConst.java
package com.example.demo.constant;
/**
* エラーメッセージID定数クラス
* @author 81906
*
*/
public class ErrorMessageConst {
/** ログイン画面:入力誤り */
public static final String LOGIN_WRONG_INPUT = "login.wrongInput";
}
次→