質問するログイン新規登録

Q&A

解決済

1回答

837閲覧

springbootのバリデーションのbindingResultに検証結果がバインドされていない

kagitaku

総合スコア1

Java

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

0グッド

0クリップ

投稿2024/06/24 15:04

0

0

実現したいこと

htmlのテキストボックスにて、入力しないままアップロードボタンを押下した場合にbegin.htmlにリダイレクトさせたいです。

発生している問題・分からないこと

テキストボックスに値を入力しないまま、アップロードボタンを押下した場合、begin.htmlにリダイレクトしないです。

エラーメッセージ

error

1問題発生欄に記載しました。

該当のソースコード

java

1package com.example.validatePractice.controller; 2 3import com.example.validatePractice.form.InputForm; 4import org.springframework.stereotype.Controller; 5import org.springframework.ui.Model; 6import org.springframework.validation.BindingResult; 7import org.springframework.validation.annotation.Validated; 8import org.springframework.web.bind.annotation.GetMapping; 9import org.springframework.web.bind.annotation.ModelAttribute; 10import org.springframework.web.bind.annotation.PostMapping; 11 12import javax.validation.Valid; 13 14@Controller 15public class WebController { 16 17 @GetMapping(value = "/") 18 String startDisplay(InputForm inputForm) { 19 return "begin"; 20 } 21 22 @PostMapping(value = "/upload") 23 String upload(@Validated @ModelAttribute InputForm inputForm, BindingResult result, Model model) { 24 if (result.hasErrors()) { 25 return "redirect:/begin"; 26 } 27 return "validate"; 28 } 29} 30

html

1<!DOCTYPE html> 2<html xmlns:th="http://www.thymeleaf.org"> 3<head> 4 <meta charset="UTF-8"> 5 <title>begin</title> 6</head> 7<body> 8<form method="post" th:action="@{/upload}" th:object="${inputForm}"> 9 <!-- エラーメッセージはformタグ内ではないと使えない --> 10<!-- <ul th:if="${#fields.hasErrors('*')}">--> 11<!-- <li th:each="error:${#fields.errors('*')}" th:text="${error}"></li>--> 12<!-- </ul>--> 13 <input type="text" th:field="*{name}"><br /> 14<!-- <input type="file" th:field="*{uploadFile}" /><br />--> 15 <button type="submit">アップロード</button> 16</form> 17</body> 18</html>

java

1package com.example.validatePractice.form; 2 3 4import org.hibernate.validator.constraints.Length; 5 6import javax.validation.constraints.NotBlank; 7import javax.validation.constraints.NotEmpty; 8import javax.validation.constraints.NotNull; 9 10public class InputForm { 11// @FileRequired 12// private MultipartFile uploadFile; 13 14 @NotNull 15 @NotBlank 16 @NotEmpty 17 private String name; 18 19 public String getName() { 20 return this.name; 21 } 22 23 public void setName(String name) { 24 this.name = name; 25 } 26 27 @Override 28 public String toString() { 29 return "InputForm{" + 30 "name='" + name + '\'' + 31 '}'; 32 } 33} 34

pom.xml

1<?xml version="1.0" encoding="UTF-8"?> 2<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 <parent> 6 <groupId>org.springframework.boot</groupId> 7 <artifactId>spring-boot-starter-parent</artifactId> 8 <version>3.3.1</version> 9 <relativePath/> <!-- lookup parent from repository --> 10 </parent> 11 <groupId>com.example</groupId> 12 <artifactId>validatePractice</artifactId> 13 <version>0.0.1-SNAPSHOT</version> 14 <name>validatePractice</name> 15 <description>Demo project for Spring Boot</description> 16 <url/> 17 <licenses> 18 <license/> 19 </licenses> 20 <developers> 21 <developer/> 22 </developers> 23 <scm> 24 <connection/> 25 <developerConnection/> 26 <tag/> 27 <url/> 28 </scm> 29 <properties> 30 <java.version>17</java.version> 31 </properties> 32 <dependencies> 33 <dependency> 34 <groupId>org.springframework.boot</groupId> 35 <artifactId>spring-boot-starter-thymeleaf</artifactId> 36 </dependency> 37 <dependency> 38 <groupId>org.springframework.boot</groupId> 39 <artifactId>spring-boot-starter-web</artifactId> 40 </dependency> 41 42 <dependency> 43 <groupId>org.springframework.boot</groupId> 44 <artifactId>spring-boot-starter-test</artifactId> 45 <scope>test</scope> 46 </dependency> 47 48 <dependency> 49 <groupId>jakarta.validation</groupId> 50 <artifactId>jakarta.validation-api</artifactId> 51 <version>2.0.2</version> 52 </dependency> 53 54 <dependency> 55 <groupId>org.springframework.boot</groupId> 56 <artifactId>spring-boot-starter-validation</artifactId> 57 </dependency> 58 </dependencies> 59 60 <build> 61 <plugins> 62 <plugin> 63 <groupId>org.springframework.boot</groupId> 64 <artifactId>spring-boot-maven-plugin</artifactId> 65 </plugin> 66 </plugins> 67 </build> 68 69</project> 70

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

・デバッグにてアップロードボタンを押下後に確認しましたがbindingResultに検証結果であるerrorの件数が0件を確認しました。inputFormには値がバインドしていることは確認済みです。
・ネットには引数の順番が正しくない場合があるので確認しましたが、formの後にbindingResultをしているので問題ないと思います。
・validationの依存関係も問題ないと思います。

補足

よろしくお願いいたします。

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

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

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

guest

回答1

0

自己解決

解決しました。
原因は、「spring-boot-starter-validation, jakarta.validation-api」2つが競合を起こしていたためでした。

下記にて修正したpom.xmlを提示します。

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.3.1</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>validatePractice</artifactId> <version>0.0.1-SNAPSHOT</version> <name>validatePractice</name> <description>Demo project for Spring Boot</description> <url/> <licenses> <license/> </licenses> <developers> <developer/> </developers> <scm> <connection/> <developerConnection/> <tag/> <url/> </scm> <properties> <java.version>17</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>

投稿2024/06/25 14:41

編集2024/06/26 10:36
kagitaku

総合スコア1

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.29%

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

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

質問する

関連した質問