💭
[SpringFramework6][SpringBoot3]SpringBoot2.7 -> 3.0 移行におけるエラー解消について
環境
- Java -> 17
- SpringBoot -> 2.7.9
やりたいこと
SpringBootのバージョンを 2.7.9
から 3.0.4
にアップデートしたい
やったこと
build.gradle
のSpringBootのバージョンを純粋に3.0.4
に変更
before
plugins {
id 'java'
id 'org.springframework.boot' version '2.7.9'
id 'io.spring.dependency-management' version '1.1.0'
}
after
plugins {
id 'java'
id 'org.springframework.boot' version '3.0.4'
id 'io.spring.dependency-management' version '1.1.0'
}
上記の状態で試しにビルドを実行してみたところ、コンパイルエラーが発生しました。
エラー内容
エラー: パッケージjavax.validation.constraintsは存在しません
import javax.validation.constraints.AssertTrue;
エラーが発生したコード
CalilLibrarySearchParameter
package com.tutorial.springboot.redis.controller;
import io.netty.util.internal.StringUtil;
import javax.validation.constraints.AssertTrue; ⇦ エラー発生箇所
import lombok.Data;
import lombok.RequiredArgsConstructor;
@Data
@RequiredArgsConstructor
public class CalilLibrarySearchParameter {
/**
* 都道府県コード
*/
private String pref;
private String systemid;
private String geocode;
private String city;
private String format = "json";
/**
* JSONとして応答する場合はcallbackに空白を指定
*/
private String callback = "";
private Integer limit;
/**
* いずれかは指定必須のパラメータについてチェック
*
* @return 判定結果
*/
@AssertTrue(message = "either parameter must be specified.") ⇦ エラー発生箇所
public boolean isAtLeastOneRequired() {
return !(StringUtil.isNullOrEmpty(this.pref)
&& StringUtil.isNullOrEmpty(this.systemid)
&& StringUtil.isNullOrEmpty(this.geocode));
}
}
原因
SpringBoot3は、SpringFramework6をベースにしており、SpringFramework6ではJakartaEE9+となり、従来のjavax
パッケージからjakarta
パッケージに名前空間が変更されました。
例えば、Servlet API、JPA、Bean Validationなどに触れる場合には、Jakarta EE 9におけるjavaxからjakartaへの名前空間の変更に対応する必要があります。
対応
パッケージ名がjavax
となっている部分をjakarta
に変更しました。
CalilLibrarySearchParameter
package com.tutorial.springboot.redis.controller;
import io.netty.util.internal.StringUtil;
import jakarta.validation.constraints.AssertTrue; ⇦ 修正箇所
import lombok.Data;
import lombok.RequiredArgsConstructor;
@Data
@RequiredArgsConstructor
public class CalilLibrarySearchParameter {
/**
* 都道府県コード
*/
private String pref;
private String systemid;
private String geocode;
private String city;
private String format = "json";
/**
* JSONとして応答する場合はcallbackに空白を指定
*/
private String callback = "";
private Integer limit;
/**
* いずれかは指定必須のパラメータについてチェック
*
* @return 判定結果
*/
@AssertTrue(message = "either parameter must be specified.")
public boolean isAtLeastOneRequired() {
return !(StringUtil.isNullOrEmpty(this.pref)
&& StringUtil.isNullOrEmpty(this.systemid)
&& StringUtil.isNullOrEmpty(this.geocode));
}
}
たったこれだけでエラー解消しました。以上です〜
Discussion
Spring Boot2.3からpom.xmlに追加が必要になったみたいですが、また変わっていたんですね。
大変助かりました。