0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Spring Boot学習⑤~エラーメッセージをプロパティファイルで一元管理する~

Posted at

前→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

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

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メソッドを利用しています。
引数にmessageSourceErrorMessageConst.LOGIN_WRONG_INPUTを持っています。

説明しわすれていましたが、ErrorMessageConst.LOGIN_WRONG_INPUTはもともとはmessages.propertiesファイルのキーであるlogin.wrongInputでした。

しかし、引数としてlogin.wrongInputを渡すのはハードコーディングにってよくないので、キーだけを管理するクラスを作って、そこから間接的に持ってきています。

つまり、ErrorMessageConst.LOGIN_WRONG_INPUTlogin.wrongInputってことです。

これでログインに失敗したときはmodel"errorMsg",errorMsgが追加されmessages.properties内の文言を持ってきてくれます。

最後に、ErrorMessageConstクラスも載せときます。

ErrorMessageConst.java

ErrorMessageConst.java
package com.example.demo.constant;

/**
 * エラーメッセージID定数クラス
 * @author 81906
 *
 */
public class ErrorMessageConst {
	
	/** ログイン画面:入力誤り */
	public static final String LOGIN_WRONG_INPUT = "login.wrongInput";
}

次→

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?