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

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

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

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

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

Spring Boot

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

Q&A

解決済

1回答

1931閲覧

@Notnullだけが適応されない Spring

massan728

総合スコア35

Java

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

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

Spring Boot

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

0グッド

1クリップ

投稿2022/08/06 18:17

編集2022/08/07 13:34

前提

入力ホームを作成しているのですが、バリデーション複数つけた状態で他のバリデーションは適応されメッセージが出るのに、Nullの場合のみ適応されない状態です。

送信された空文字はnullに変換されるクラスを実装しています。(下記のConfigクラス)
javax.validation.constraints.NotNullがimportされている状態であることを確認済み。

実現したいこと

すべてのバリデーションが適応される状態

発生している問題・エラーメッセージ

@Notnullだけが適応されない

該当のソースコード

Java

1Controller 2 @GetMapping("/form") 3 public String form(InventoryForm inventoryForm, Model model) { 4 List<Product> prodList = productService.findAll(); 5 model.addAttribute("prodList", prodList); 6 model.addAttribute("title", "在庫数登録画面"); 7 return "inventory/form"; 8 } 9 10 11 @PostMapping("/insert") 12 public String insert( 13 @Validated @ModelAttribute InventoryForm inventoryForm, 14 BindingResult result, 15 Model model, 16 RedirectAttributes redirectAttributes) { 17 18 Inventory inventory = makeInventory(inventoryForm); 19 20 if (result.hasErrors()) { 21 model.addAttribute("inventoryForm", inventoryForm); 22 model.addAttribute("title", "在庫数登録画面"); 23 24 return "inventory/form"; 25 } 26 27 inventoryService.create(inventory); 28 model.addAttribute("title", "在庫数登録画面"); 29 redirectAttributes.addFlashAttribute("complete", "登録完了しました。"); 30 return "redirect:/inventory/form"; 31 32 }

Java

1Form 2public class InventoryForm { 3 4 @NotNull(message ="商品名を選択してください。") 5 private int productId; 6 7 @NotNull(message = "数値を入力してください。") 8 @PositiveOrZero(message = "正の数を入力してください。") 9 private BigDecimal quantity; 10 11 @NotNull(message = "日付を設定してください。") 12 @DateTimeFormat(pattern = "yyyy-MM-dd") 13 @PastOrPresent(message = "日付が未来に設定されています。") 14 private LocalDate reportDate;

HTML

1Thymeleaf 2<form method="POST" th:action="@{/inventory/insert}" th:object="${inventoryForm}"> 3 <table> 4 <tr> 5 <td><label>商品名(選択してください):</label></td> 6 <td> 7 <input type="text" name="name" list="productId" /> 8 <datalist id="productId" th:value="productId"> 9 <option th:each="product : ${prodList}" th:inline="text" th:utext="${product.name}" th:filed="${product.id}"> 10 </option> 11 </datalist> 12 </td> 13 <td> 14 <div th:if="${#fields.hasErrors('productId')}" th:errors="*{productId}"></div> 15 </td> 16 17 </tr> 18 <tr> 19 <td><label>在庫数:</label></td> 20 <td><input type="number" name="quantity" th:value="*{quantity}" /></td> 21 <td><div th:if="${#fields.hasErrors('quantity')}" th:errors="*{quantity}"></div></td> 22 </tr> 23 <tr> 24 <td><label>日付:</label></td> 25 <td><input type="date" name="reportDate" th:value="*{reportDate}" /></td> 26 <td><div th:if="${#fields.hasErrors('reportDate')}" th:errors="*{reportDate}"></div></td> 27 </tr> 28 29 30 </table> 31 <input th:if="${productId}" type="hidden" name="productId" th:value="${productId}"> 32 <input type="submit" class="btn btn-primary" value="送信" /> 33 </form>

Java

1Config 2@ControllerAdvice 3public class WebMvcControllerAdvice { 4 5 /* 6 * This method changes empty character to null 7 */ 8 @InitBinder 9 public void initBinder(WebDataBinder dataBinder) { 10 dataBinder.registerCustomEditor(String.class, new StringTrimmerEditor(true)); 11 }

試したこと

送信された空文字はnullに変換されるクラスを実装しています。
javax.validation.constraints.NotNullがimportされている状態であることを確認済み。

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

java11, spring boot2.7.0, thymeleaf

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

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

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

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

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

massan728

2022/08/07 07:42

@NotEmptyと@NotBlankもやってみたのですが、 No validator could be found for constraint 'javax.validation.constraints.NotEmpty' validating type 'java.time.LocalDate'. というエラーがでてメッセージが表示されない状態です。
jimbe

2022/08/07 07:50 編集

NotNull でしょうか、それとも Notnull でしょうか。大文字小文字が異なれば別物ですが。 コードのマークダウンでファイル名っぽいものを書かれている箇所は、言語名(java とか html とか)を書いてください。 ファイル名は直前の行などに書いてください。
massan728

2022/08/07 13:40

NotNullのほうです。 書式は修正しました。
guest

回答1

0

自己解決

試行錯誤してみるとControllerのフォームから受け取ったデータの詰め替えのところでエラーが起きていることがわかりました。
Inventory inventory = makeInventory(inventoryForm);
の部分をif (result.hasErrors())の下に記述することで解決しました。

投稿2022/08/08 09:15

massan728

総合スコア35

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問