質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

9135閲覧

Spring-BootのFormバリデーション@Patternのリソースについて

sllmejacob

総合スコア72

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2017/09/14 10:05

やりたいこと

後述のようなコントローラ&フォームのプログラムにおいて、
@Patternアノテーションで日付文字列の形式チェックを行い、
検証エラー時はメッセージリソースからメッセージ表示を行いたいのですが、
この際、message.propertiesのリソースが参照できずに困っております。

コントローラ抜粋

java

1@PostMapping("save") 2public String save( 3 @Validated HogeForm form, 4 ...(攻略)

フォーム抜粋

java

1@Data 2public class HogeForm { 3 ...(中略) 4 @NotNull 5 @Pattern(regexp="(([2-9][0-9])[0-9]{2})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])", message="#{error.pattern.unmatch}") 6 private String startDate; 7 ...(後略) 8}

message.properties

properties

1error.pattern.unmatch=入力形式が合っていません。

現在の出力

以下のようにformの@Patternに定義したmessage値が素で出てきてしまいます。

html

1#{error.pattern.unmatch}

理想は『入力形式が合っていません。』と出てほしいのですが。

試したこと

@Patternのmessage定義を以下のように#無しに変えてみましたが、それでも出てくれません。

message="{error.pattern.unmatch}")

同箇所を日本語で直書きすると出てくるようです。
が、これはちょっと避けたく。

message="パターンに一致していません。"

バージョン等

Java 1.8
Spring Boot 1.5.2
Thymeleaf 2.1.5.RELEASE

以上、よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

原因はメッセージ定義ファイルを参照できていないことだろうと思いますが、

startDateがnullだった場合(@NotNull)のエラーメッセージが
日本語で出力される -> この回答とは別の原因
日本語以外で出力される -> この回答で合っているかも

MessageConfig.java

java

1@Configuration 2public class MessageConfig { 3 4 // ここの設定方法はspring-bootのバージョンで変わってくるのでダメだったら他のやり方を調べてください 5 // LocalValidatorFactoryBean とかで検索すれば多分でてきます 6 @Bean 7 public LocalValidatorFactoryBean localValidatorFactoryBean(MessageSource messageSource) { 8 9 LocalValidatorFactoryBean factory = new LocalValidatorFactoryBean(); 10 factory.setValidationMessageSource(messageSource); 11 12 return factory; 13 } 14}

HogeForm.java

java

1@Pattern(regexp="...", message="#{error.pattern.unmatch}")

java

1@Pattern(regexp="...")

messages.properties

properties

1error.pattern.unmatch=入力形式が合っていません。

properties

1javax.validation.constraints.Pattern.message=入力形式が合っていません。 2

投稿2017/09/20 02:20

YukiYoshida

総合スコア93

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sllmejacob

2017/09/21 06:01

返信が遅くなってしまいました。ご回答ありがとうございます。 上記確認してこちらに報告させていただきます。 取り急ぎご返信のみ。
sllmejacob

2017/10/04 12:27

大変ご返信が遅くなってしまいました。。。 結論として@Patternを使わずにコントローラでチェックを実装しました。 ご提示いただいた方法でもできそうだったのですが、 プロパティを限定指定されてしまうことと、形式エラーメッセージが固定化されてしまうため、 方法を変えて対応することになりました。 いただいた回答にベストアンサーを付けさせていただきました。 ご返信ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問