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

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

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

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

Thymeleaf

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

Spring Boot

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

Q&A

解決済

1回答

231閲覧

SpringBootのバリデーションチェックが反映されません

karakorum

総合スコア20

Java

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

Thymeleaf

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

Spring Boot

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

0グッド

0クリップ

投稿2024/02/16 07:16

###実現したいことと問題点
書籍:Springの解体新書 第二版の6章でつまずいております。
spring bootの画面アプリです。
フォームクラスを作成し、javax.validationを使って各入力フォームにバリデーションチェックの処理を入れました。
しかし、画面を開くとバリデーションチェックがされません。(空文字チェックなど)
なぜでしょうか?

###試したこと
**①mavenへの依存関係の設定
pom.xmlへの設定が問題かと思い、色々試しましたが結局できませんでした。
(ex)↓の設定を追加したり、抜かしたりしました。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version> <!-- または最新のバージョン -->
</dependency>
※参考サイト
https://qiita.com/tatetsujitomorrow/items/a397c311a95d66e4f955
https://qiita.com/shikanomoto/items/6e5ec1d6885942c22046
https://dev.thanaism.com/2021/11/coding-java/

**②javafxが使えない?
バージョン的にjavafxが使えないと思い、
import javax.validation.constraints.;の部分をすべて
import org.hibernate.validator.constraints.
;
に変更して試したところ、うまくバリデーションチェックが動きました。
ただ、調べるとhibernateの方は非推奨であることや古いバージョンであることから、
なんとかjavafx.validationを使うやり方で実装を行いたいです。

###ソースコード
**全部で6つあります
①LoginController.java 一番最初に処理を受け付けるコントローラー
②login.html ①から遷移する画面 ログイン画面
③SignupController.java 入力画面に遷移させるコントローラー
④signup.html ③から遷移する画面 ログイン情報登録画面
⑤SignupForm.java 今回問題となっているフォームクラス
⑥pom.xml mavenの設定ファイル

LoginController.java

1package com.example.controller; 2 3import org.springframework.stereotype.Controller; 4import org.springframework.web.bind.annotation.GetMapping; 5 6@Controller 7public class LoginController { 8 @GetMapping("/login") 9 public String getLogin() { 10 return "login/login"; 11 } 12}

login.html

SignupController.java

1package com.example.controller; 2 3import java.util.Locale; 4import java.util.Map; 5 6import org.springframework.beans.factory.annotation.Autowired; 7import org.springframework.stereotype.Controller; 8import org.springframework.ui.Model; 9import org.springframework.validation.BindingResult; 10import org.springframework.validation.annotation.Validated; 11import org.springframework.web.bind.annotation.GetMapping; 12import org.springframework.web.bind.annotation.ModelAttribute; 13import org.springframework.web.bind.annotation.PostMapping; 14import org.springframework.web.bind.annotation.RequestMapping; 15 16import com.example.application.service.UserApplicationService; 17import com.example.form.SignupForm; 18 19import lombok.extern.slf4j.Slf4j; 20 21@Controller 22@RequestMapping("/user") 23@Slf4j 24public class SignupController { 25 @Autowired 26 private UserApplicationService userApplicationService; 27 28 @GetMapping("/signup") 29 public String getSignup(Model model, Locale locale, @ModelAttribute SignupForm form) { 30 Map<String, Integer> genderMap = userApplicationService.getGenderMap(locale); 31 model.addAttribute("genderMap", genderMap); 32 return "user/signup"; 33 } 34 35 @PostMapping("/signup") 36 public String postSignup(Model model, Locale locale, @ModelAttribute @Validated SignupForm form, BindingResult bindingResult) { 37 38 //入力チェック 39 if (bindingResult.hasErrors()) { 40 return getSignup(model, locale, form); 41 } 42 43 log.info(form.toString()); 44 45 return "redirect:/login"; 46 } 47}

signup.html

SignupForm.java

1package com.example.form; 2 3import java.util.Date; 4 5import javax.validation.constraints.Email; 6import javax.validation.constraints.Max; 7import javax.validation.constraints.Min; 8import javax.validation.constraints.NotBlank; 9import javax.validation.constraints.NotNull; 10import javax.validation.constraints.Pattern; 11import javax.validation.constraints.Size; 12 13import org.springframework.format.annotation.DateTimeFormat; 14 15import lombok.Data; 16 17@Data 18public class SignupForm { 19 @NotBlank 20 @Email 21 private String userId; 22 23 @NotBlank 24 @Size(min=4,max=100) 25 @Pattern(regexp="^[a-zA-Z0-9]+$") 26 private String password; 27 28 @NotBlank 29 private String userName; 30 31 @DateTimeFormat(pattern="yyyy/mm/dd") 32 @NotNull 33 private Date birthday; 34 35 @Min(20) 36 @Max(100) 37 private Integer age; 38 39 @NotNull 40 private Integer gender; 41} 42

###バージョン
Java:17
Spring boot:3.2.2
Version: 2023-12 (4.30.0)

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

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

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

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

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

karakorum

2024/02/16 07:17

文字数制限のため足りなかったので、追記します。 pomxmlは↓の通りです。 ```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.2.2</version> <relativePath /> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>SpringBootSample</artifactId> <version>0.0.1-SNAPSHOT</version> <name>SpringBootSample</name> <description>Demo project for Spring Boot</description> <properties> <java.version>17</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jdbc</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <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-validation</artifactId> </dependency> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>2.0.1.Final</version> <!-- または最新のバージョン --> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.webjars</groupId> <artifactId>jquery</artifactId> <version>3.5.1</version> </dependency> <dependency> <groupId>org.webjars</groupId> <artifactId>bootstrap</artifactId> <version>4.5.3</version> </dependency> <dependency> <groupId>org.webjars</groupId> <artifactId>webjars-locator</artifactId> <version>0.40</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build> </project> ```
guest

回答1

0

ベストアンサー

ご指摘の通り、javaxは2年前の書き方で現在使うことができません。2022年のSpring Boot 3.0(Java 17)から以下のようにjakartaになっております。

java

1import jakarta.validation.constraints.Email; 2import jakarta.validation.constraints.Max; 3import jakarta.validation.constraints.Min; 4import jakarta.validation.constraints.NotBlank; 5import jakarta.validation.constraints.NotNull; 6import jakarta.validation.constraints.Pattern; 7import jakarta.validation.constraints.Size;

それと、気になった点がいくつかあるのですが、
import java.util.Dateは10年前の書き方なので、現在ですとimport java.time.LocalDateなどが推奨されております。
https://www.lac.co.jp/lacwatch/people/20220720_003047.html

java

1import java.time.LocalDate; 2 3private LocalDate birthday;

また、webjars-locator 0.40は非常に多くの脆弱性があるため、可能でしたらアップグレードもご検討ください。
https://mvnrepository.com/artifact/org.webjars/webjars-locator/0.40

投稿2024/02/16 11:29

KT001

総合スコア618

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

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

karakorum

2024/02/17 01:55

ご回答いただきありがとうございます! やはりバージョンが問題だったんですね・・・ jakartaで試したら無事バリデーションが反映されました! ありがとうございましたm(__)m import java.util.Dateやwebjars-locator 0.40も新しいバージョンに変更したいと思います! ありがとうございました!
KT001

2024/02/17 02:14

解決してよかったです! Spring Bootではwebjars-locatorではなく、一般的にwebjars-locator-coreが使われます。こちらを使うとSpring Bootが管理してくれるため簡単にアップグレードできる(バージョン指定が不要)なので、お試しください。 <dependency> <groupId>org.webjars</groupId> <artifactId>webjars-locator-core</artifactId> </dependency>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問