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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

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

Q&A

1回答

1818閲覧

spring カスタムバリデータに関して

sshu0062

総合スコア8

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Spring Boot

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

0グッド

0クリップ

投稿2020/03/24 09:38

springのカスタムバリデータの動的パラメータが解決されない

エラーメッセージとして、「{0}は必須入力です。」と表示され、{0}が解決されません。
RestControllerでエラーは返ります。

■実行結果

[ "fundNm: {0}は必須入力です。", ]

該当のソースコード

■Request(Form)

@NotBlank(message = "{require_check}") private String fundNm;

■message.properties

fundNm=ファンド名 require_check={0}は必須入力です。

■エラーハンドラー

@RestControllerAdvice public class ApiExceptionHandler { private static final Logger LOG = LoggerFactory.getLogger(ApiExceptionHandler.class); @ExceptionHandler(MethodArgumentNotValidException.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) public ResponseEntity<?> handleException(MethodArgumentNotValidException ex) { LOG.error("ApiExceptionHandler", ex); final List<String> errors = new ArrayList<String>(); for (final FieldError error : ex.getBindingResult().getFieldErrors()) { errors.add(error.getField() + ": " + error.getDefaultMessage()); } HttpStatus status = HttpStatus.BAD_REQUEST; return new ResponseEntity<>(errors, status); } }

■WebMvcConfig implements WebMvcConfigurer

@Bean public MessageSource messageSource() { ReloadableResourceBundleMessageSource bean = new ReloadableResourceBundleMessageSource(); //メッセージのプロパティファイル名(デフォルト)を指定します //下記ではmessages.propertiesファイルがセットされます bean.setBasename("classpath:messages"); //メッセージプロパティの文字コードを指定します bean.setDefaultEncoding("UTF-8"); return bean; } @Bean public LocalValidatorFactoryBean localValidatorFactoryBean() { LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean(); localValidatorFactoryBean.setValidationMessageSource(messageSource()); return localValidatorFactoryBean; }

補足情報(FW/ツールのバージョンなど)

■build.gradle

implementation 'org.springframework.boot:spring-boot-starter-web' compile 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.0'

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

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

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

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

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

guest

回答1

0

カスタムバリデータの内容が書かれていないので、
実行結果の欄に表示されている内容がエラーハンドラーの
errors.add(error.getField() + ": " + error.getDefaultMessage()); で出力されたものという前提で回答します。

error.getDefaultMessage() メソッドはメッセージリソースに定義されている文言をそのまま返したはずなので、メッセージリソースからfundNmの値を取り出して{0}のところにセットしてあげる処理を書かないといけないです。

投稿2020/04/06 07:13

deaf_tadashi

総合スコア200

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

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

sshu0062

2020/04/06 07:50

ご回答ありがとうございます。 >メッセージリソースからfundNmの値を取り出して{0}のところにセットしてあげる処理 こちら、どのような処理を書けばいいのか分かりかねます。 private String fundNmとメッセージのfundNmが一致していれば、{0}は自動補完される認識でした。 どのように記載すればよろしいでしょうか? お手数をおかけしますが、よろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問