Миграция на Spring Boot 3.1.x. Update / Fix / Refactoring
Миграция на Spring Boot 3.1.x
- Spring 6, Hibernate 6.2, Hibernate Validator 7, R2DBC 1.0, JPA 3.1, Tomcat 10
- Java 17 – минимальная версия
- Генерация нативных образов GraalVM
- Улучшения в observability через Micrometer и Micrometer Tracing
- Переход от Java EE к Jakarta EE. Jakarta EE 9 – минимальная версия, поддержка Jakarta EE 10
- В pom.xml обновляем версии Spring и Springdoc
- Мигрируем Springdoc на 2.x:
меняется зависимости и пакет
GroupedOpenApi
. - Меняем зависимость jackson-datatype-hibernate5 на jackson-datatype-hibernate5-jakarta и в
AppConfig
заменяемHibernate5Module
наHibernate5JakartaModule
- В security
antMatchers
меняется наrequestMatchers
и нужно явно исключать swagger-ui из авторизации. Плюс добавилась миграция на Spring Security 6 ResponseEntityExceptionHandler
теперь поддерживает спецификацию RFC-7807 - описание ошибок, перешел на нее в исключениях. В класс описания ошибокProblemDetail
можно добавлять свои поля: вGlobalExceptionHandler#handleMethodArgumentNotValid()
добавил полеinvalid_params
. Однако при сериализации Jackson через поля, как у нас, в ответе это поле дублируется. Пришлось делать workaround: классAppConfig.MixIn
. Для обработкиAppException
сделал метод, возвращающийProblemDetail
- В
AdminUserControllerTest
не идут тесты на запросы со слешем в конце. Сделал отдельную переменнуюREST_URL_SLASH
- Добавил исключения и поменял данные пользователей, как на стажировке TopJava
Apply patch 8_01_migrate_spring_boot_3_1_2
Spring Boot 3.0 Goes GA
What's New in Spring Framework 6.x
Spring Boot 3.0 Goes GA
Get ready for Spring Boot 3.0
The best way to do the Spring 6 migration
Spring Boot 3.0 Migration Guide
Spring Boot 3.1 Release Notes
Update / Fix / Refactoring
Apply patch 8_02_update_fix_refactoring
Update:
- Перешел на LTS JDK 21 (не забудте поменять SDK в Project Structure... и сделать mvn clean + Refresh)
- Обновил версии spring-boot-starter-parent (3.2.0), springdoc(2.3.0) и jsoup (1.17.1)
- В новой версии Hibernate
ElementCollection
дляUser.roles
не дружит с аннотациямиJoinColumn
иOnDelete
, удалил их
Fix:
OpenApiConfig
: исправил неверное имя приложенияSecurityFilterChain
: подключил неиспользованныйauthenticationEntryPoint
, перенесwebSecurityCustomizer()/ignoring()
вfilterChain()/permitAll()
BaseEntity.id()
: убрал дублирование (уже определен вdefault HasId.id()
) и ненужный без HATEOASPersistable
Refactoring:
RestExceptionHandler
- заменил специфичноеBindException.getMessage()
на "BindException".
Неверные поля есть вinvalid_params
User.roles
сделал ненулевымRestExceptionHandler
- в вывод ошибки согласно RFC 7807 добавил title и instance(path)NoHtml/NoHtmlValidator
- перенес на уровень выше: пакетbootjava.validation
util.validation.ValidationUtil
переименовал/перенес вweb.RestValidation
. Его назначение - проверка в контроллерах входных данных REST API