💭

[SpringFramework6][SpringBoot3]SpringBoot2.7 -> 3.0 移行におけるエラー解消について

2023/03/06に公開1

環境

  • 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パッケージに名前空間が変更されました。


https://logico-jp.io/2021/09/04/a-java-17-and-jakarta-ee-9-baseline-for-spring-framework-6/

例えば、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に追加が必要になったみたいですが、また変わっていたんですね。
大変助かりました。