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

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

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

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

Thymeleaf

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

Spring Boot

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

解決済

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

massan728
massan728

総合スコア29

Java

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

Thymeleaf

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

Spring Boot

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

1回答

0リアクション

1クリップ

284閲覧

投稿2022/08/06 18:17

編集2022/08/07 13:34

前提

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

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

実現したいこと

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

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

@Notnullだけが適応されない

該当のソースコード

Java

Controller @GetMapping("/form") public String form(InventoryForm inventoryForm, Model model) { List<Product> prodList = productService.findAll(); model.addAttribute("prodList", prodList); model.addAttribute("title", "在庫数登録画面"); return "inventory/form"; } @PostMapping("/insert") public String insert( @Validated @ModelAttribute InventoryForm inventoryForm, BindingResult result, Model model, RedirectAttributes redirectAttributes) { Inventory inventory = makeInventory(inventoryForm); if (result.hasErrors()) { model.addAttribute("inventoryForm", inventoryForm); model.addAttribute("title", "在庫数登録画面"); return "inventory/form"; } inventoryService.create(inventory); model.addAttribute("title", "在庫数登録画面"); redirectAttributes.addFlashAttribute("complete", "登録完了しました。"); return "redirect:/inventory/form"; }

Java

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

HTML

Thymeleaf <form method="POST" th:action="@{/inventory/insert}" th:object="${inventoryForm}"> <table> <tr> <td><label>商品名(選択してください):</label></td> <td> <input type="text" name="name" list="productId" /> <datalist id="productId" th:value="productId"> <option th:each="product : ${prodList}" th:inline="text" th:utext="${product.name}" th:filed="${product.id}"> </option> </datalist> </td> <td> <div th:if="${#fields.hasErrors('productId')}" th:errors="*{productId}"></div> </td> </tr> <tr> <td><label>在庫数:</label></td> <td><input type="number" name="quantity" th:value="*{quantity}" /></td> <td><div th:if="${#fields.hasErrors('quantity')}" th:errors="*{quantity}"></div></td> </tr> <tr> <td><label>日付:</label></td> <td><input type="date" name="reportDate" th:value="*{reportDate}" /></td> <td><div th:if="${#fields.hasErrors('reportDate')}" th:errors="*{reportDate}"></div></td> </tr> </table> <input th:if="${productId}" type="hidden" name="productId" th:value="${productId}"> <input type="submit" class="btn btn-primary" value="送信" /> </form>

Java

Config @ControllerAdvice public class WebMvcControllerAdvice { /* * This method changes empty character to null */ @InitBinder public void initBinder(WebDataBinder dataBinder) { dataBinder.registerCustomEditor(String.class, new StringTrimmerEditor(true)); }

試したこと

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

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

java11, spring boot2.7.0, thymeleaf

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

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のほうです。 書式は修正しました。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Java

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

Thymeleaf

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

Spring Boot

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