Modernize MIME negotiation and serialization for Spring Boot 4.1 - #16237
Modernize MIME negotiation and serialization for Spring Boot 4.1#16237codeconsole wants to merge 36 commits into
Conversation
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## 8.0.x #16237 +/- ##
===================================================
- Coverage 54.7149% 30.1520% -24.5629%
+ Complexity 20421 517 -19904
===================================================
Files 2101 81 -2020
Lines 100978 4736 -96242
Branches 17907 816 -17091
===================================================
- Hits 55250 1428 -53822
+ Misses 37860 3065 -34795
+ Partials 7868 243 -7625
🚀 New features to boost your workflow:
|
Deprecation migration examplesThis comment maps every API deprecated by this PR to its modern replacement. Overloads are grouped where their migration is identical.
1.
|
🚨 TestLens detected 3270 failed tests 🚨Here is what you can do:
Test SummaryCI / Build Grails-Core (Ubuntu JDK 21) > :grails-cache:test
CI / Build Grails-Core (Ubuntu JDK 21) > :grails-data-graphql:test
CI / Build Grails-Core (Ubuntu JDK 21) > :grails-gsp:test (first 40 of 50)
CI / Build Grails-Core (Ubuntu JDK 21) > :grails-mail:test
CI / Build Grails-Core (Ubuntu JDK 25) > :grails-cache:test
CI / Build Grails-Core (Ubuntu JDK 25) > :grails-data-graphql:test
CI / Build Grails-Core (Ubuntu JDK 25) > :grails-gsp:test (first 40 of 50)
CI / Build Grails-Core (Ubuntu JDK 25) > :grails-mail:test
CI / Build Grails-Core (Windows JDK 25 shard 0) > :grails-cache:test
CI / Build Grails-Core (Windows JDK 25 shard 0) > :grails-data-graphql:test
CI / Build Grails-Core (Windows JDK 25 shard 1) > :grails-gsp:test (first 40 of 50)
CI / Build Grails-Core (Windows JDK 25 shard 2) > :grails-mail:test
CI / Build Grails-Core (macOS JDK 21) > :grails-cache:test
CI / Build Grails-Core (macOS JDK 21) > :grails-data-graphql:test
CI / Build Grails-Core (macOS JDK 21) > :grails-gsp:test (first 40 of 50)
CI / Build Grails-Core (macOS JDK 21) > :grails-mail:test
CI / Build Grails-Core Rerunning all Tasks (Ubuntu JDK 21 shard 0) > :grails-cache:test
CI / Build Grails-Core Rerunning all Tasks (Ubuntu JDK 21 shard 0) > :grails-data-graphql:test
CI / Build Grails-Core Rerunning all Tasks (Ubuntu JDK 21 shard 1) > :grails-gsp:test (first 40 of 50)
CI / Build Grails-Core Rerunning all Tasks (Ubuntu JDK 21 shard 2) > :grails-mail:test
CI / Functional Tests (Java 21, indy=false, shard 1) > :grails-test-examples-app4:integrationTest
CI / Functional Tests (Java 21, indy=false, shard 1) > :grails-test-examples-cache:integrationTest
CI / Functional Tests (Java 21, indy=false, shard 1) > :grails-test-examples-config-report:integrationTest
CI / Functional Tests (Java 21, indy=false, shard 1) > :grails-test-examples-database-cleanup:integrationTest
CI / Functional Tests (Java 21, indy=false, shard 1) > :grails-test-examples-enable-mvc-check:integrationTest
CI / Functional Tests (Java 21, indy=false, shard 1) > :grails-test-examples-external-configuration:integrationTest (first 40 of 49)
CI / Functional Tests (Java 21, indy=false, shard 1) > :grails-test-examples-geb-gebconfig:integrationTest
CI / Functional Tests (Java 21, indy=false, shard 1) > :grails-test-examples-gorm:integrationTest (first 40 of 227)
CI / Functional Tests (Java 21, indy=false, shard 1) > :grails-test-examples-graphql-grails-docs-app:integrationTest
CI / Functional Tests (Java 21, indy=false, shard 1) > :grails-test-examples-graphql-grails-tenant-app:integrationTest
CI / Functional Tests (Java 21, indy=false, shard 1) > :grails-test-examples-gsp-layout:test
CI / Functional Tests (Java 21, indy=false, shard 1) > :grails-test-examples-gsp-sitemesh3:integrationTest
CI / Functional Tests (Java 21, indy=false, shard 1) > :grails-test-examples-hyphenated:integrationTest
CI / Functional Tests (Java 21, indy=false, shard 1) > :grails-test-examples-issue-10279:integrationTest
CI / Functional Tests (Java 21, indy=false, shard 1) > :grails-test-examples-issue-views-182:integrationTest
CI / Functional Tests (Java 21, indy=false, shard 1) > :grails-test-examples-jetty:integrationTest
CI / Functional Tests (Java 21, indy=false, shard 1) > :grails-test-examples-latency:integrationTest
CI / Functional Tests (Java 21, indy=false, shard 1) > :grails-test-examples-plugins-exploded:integrationTest
CI / Functional Tests (Java 21, indy=false, shard 1) > :grails-test-examples-plugins-issue11005:integrationTest
CI / Functional Tests (Java 21, indy=false, shard 1) > :grails-test-examples-plugins-loadsecond:integrationTest
CI / Functional Tests (Java 21, indy=false, shard 1) > :grails-test-examples-scaffolding-fields:integrationTest (first 40 of 105)
CI / Functional Tests (Java 21, indy=false, shard 1) > :grails-test-examples-test-phases:integrationTest
CI / Functional Tests (Java 21, indy=false, shard 1) > :grails-test-examples-undertow:integrationTest
CI / Functional Tests (Java 21, indy=true, shard 1) > :grails-test-examples-app4:integrationTest
CI / Functional Tests (Java 21, indy=true, shard 1) > :grails-test-examples-cache:integrationTest
CI / Functional Tests (Java 21, indy=true, shard 1) > :grails-test-examples-config-report:integrationTest
CI / Functional Tests (Java 21, indy=true, shard 1) > :grails-test-examples-database-cleanup:integrationTest
CI / Functional Tests (Java 21, indy=true, shard 1) > :grails-test-examples-enable-mvc-check:integrationTest
CI / Functional Tests (Java 21, indy=true, shard 1) > :grails-test-examples-external-configuration:integrationTest (first 40 of 49)
CI / Functional Tests (Java 21, indy=true, shard 1) > :grails-test-examples-geb-gebconfig:integrationTest
CI / Functional Tests (Java 21, indy=true, shard 1) > :grails-test-examples-gorm:integrationTest (first 40 of 227)
CI / Functional Tests (Java 21, indy=true, shard 1) > :grails-test-examples-graphql-grails-docs-app:integrationTest
CI / Functional Tests (Java 21, indy=true, shard 1) > :grails-test-examples-graphql-grails-tenant-app:integrationTest
CI / Functional Tests (Java 21, indy=true, shard 1) > :grails-test-examples-gsp-layout:test
CI / Functional Tests (Java 21, indy=true, shard 1) > :grails-test-examples-gsp-sitemesh3:integrationTest
CI / Functional Tests (Java 21, indy=true, shard 1) > :grails-test-examples-hyphenated:integrationTest
CI / Functional Tests (Java 21, indy=true, shard 1) > :grails-test-examples-issue-10279:integrationTest
CI / Functional Tests (Java 21, indy=true, shard 1) > :grails-test-examples-issue-views-182:integrationTest
CI / Functional Tests (Java 21, indy=true, shard 1) > :grails-test-examples-jetty:integrationTest
CI / Functional Tests (Java 21, indy=true, shard 1) > :grails-test-examples-latency:integrationTest
CI / Functional Tests (Java 21, indy=true, shard 1) > :grails-test-examples-plugins-exploded:integrationTest
CI / Functional Tests (Java 21, indy=true, shard 1) > :grails-test-examples-plugins-issue11005:integrationTest
CI / Functional Tests (Java 21, indy=true, shard 1) > :grails-test-examples-plugins-loadsecond:integrationTest
CI / Functional Tests (Java 21, indy=true, shard 1) > :grails-test-examples-scaffolding-fields:integrationTest (first 40 of 105)
CI / Functional Tests (Java 21, indy=true, shard 1) > :grails-test-examples-test-phases:integrationTest
CI / Functional Tests (Java 21, indy=true, shard 1) > :grails-test-examples-undertow:integrationTest
CI / Functional Tests (Java 25, indy=false) > :grails-test-examples-app2:integrationTest
CI / Functional Tests (Java 25, indy=false) > :grails-test-examples-app3:integrationTest
CI / Functional Tests (Java 25, indy=false) > :grails-test-examples-app5:integrationTest
CI / Functional Tests (Java 25, indy=false) > :grails-test-examples-async-events-pubsub-demo:integrationTest
CI / Functional Tests (Java 25, indy=false) > :grails-test-examples-datasources:integrationTest
CI / Functional Tests (Java 25, indy=false) > :grails-test-examples-exploded:integrationTest
CI / Functional Tests (Java 25, indy=false) > :grails-test-examples-geb-context-path:integrationTest
CI / Functional Tests (Java 25, indy=false) > :grails-test-examples-geb:integrationTest
CI / Functional Tests (Java 25, indy=false) > :grails-test-examples-graphql-grails-multi-datastore-app:integrationTest
CI / Functional Tests (Java 25, indy=false) > :grails-test-examples-graphql-grails-test-app:integrationTest
CI / Functional Tests (Java 25, indy=false) > :grails-test-examples-gsp-compile-static:integrationTest
CI / Functional Tests (Java 25, indy=false) > :grails-test-examples-gsp-layout:integrationTest
CI / Functional Tests (Java 25, indy=false) > :grails-test-examples-issue-11102:integrationTest
CI / Functional Tests (Java 25, indy=false) > :grails-test-examples-issue-15228:integrationTest
CI / Functional Tests (Java 25, indy=false) > :grails-test-examples-issue-698-domain-save-npe:integrationTest
CI / Functional Tests (Java 25, indy=false) > :grails-test-examples-mail:integrationTest
CI / Functional Tests (Java 25, indy=false) > :grails-test-examples-namespaces:integrationTest
CI / Functional Tests (Java 25, indy=false) > :grails-test-examples-plugins-loadfirst:integrationTest
CI / Functional Tests (Java 25, indy=false) > :grails-test-examples-quartz:integrationTest
CI / Functional Tests (Java 25, indy=false) > :grails-test-examples-scaffolding:integrationTest
CI / Functional Tests (Java 25, indy=false, shard 1) > :grails-test-examples-app4:integrationTest
CI / Functional Tests (Java 25, indy=false, shard 1) > :grails-test-examples-cache:integrationTest
CI / Functional Tests (Java 25, indy=false, shard 1) > :grails-test-examples-config-report:integrationTest
CI / Functional Tests (Java 25, indy=false, shard 1) > :grails-test-examples-database-cleanup:integrationTest
CI / Functional Tests (Java 25, indy=false, shard 1) > :grails-test-examples-enable-mvc-check:integrationTest
CI / Functional Tests (Java 25, indy=false, shard 1) > :grails-test-examples-external-configuration:integrationTest (first 40 of 49)
CI / Functional Tests (Java 25, indy=false, shard 1) > :grails-test-examples-geb-gebconfig:integrationTest
CI / Functional Tests (Java 25, indy=false, shard 1) > :grails-test-examples-gorm:integrationTest (first 40 of 227)
CI / Functional Tests (Java 25, indy=false, shard 1) > :grails-test-examples-graphql-grails-docs-app:integrationTest
CI / Functional Tests (Java 25, indy=false, shard 1) > :grails-test-examples-graphql-grails-tenant-app:integrationTest
CI / Functional Tests (Java 25, indy=false, shard 1) > :grails-test-examples-gsp-layout:test
CI / Functional Tests (Java 25, indy=false, shard 1) > :grails-test-examples-gsp-sitemesh3:integrationTest
CI / Functional Tests (Java 25, indy=false, shard 1) > :grails-test-examples-hyphenated:integrationTest
CI / Functional Tests (Java 25, indy=false, shard 1) > :grails-test-examples-issue-10279:integrationTest
CI / Functional Tests (Java 25, indy=false, shard 1) > :grails-test-examples-issue-11767:integrationTest
CI / Functional Tests (Java 25, indy=false, shard 1) > :grails-test-examples-issue-views-182:integrationTest
CI / Functional Tests (Java 25, indy=false, shard 1) > :grails-test-examples-jetty:integrationTest
CI / Functional Tests (Java 25, indy=false, shard 1) > :grails-test-examples-latency:integrationTest
CI / Functional Tests (Java 25, indy=false, shard 1) > :grails-test-examples-micronaut-groovy-only:integrationTest
CI / Functional Tests (Java 25, indy=false, shard 1) > :grails-test-examples-micronaut-hibernate5:integrationTest
CI / Functional Tests (Java 25, indy=false, shard 1) > :grails-test-examples-micronaut-hibernate7:integrationTest
CI / Functional Tests (Java 25, indy=false, shard 1) > :grails-test-examples-micronaut:integrationTest (first 40 of 95)
CI / Functional Tests (Java 25, indy=false, shard 1) > :grails-test-examples-plugins-exploded:integrationTest
CI / Functional Tests (Java 25, indy=false, shard 1) > :grails-test-examples-plugins-issue11005:integrationTest
CI / Functional Tests (Java 25, indy=false, shard 1) > :grails-test-examples-plugins-loadsecond:integrationTest
CI / Functional Tests (Java 25, indy=false, shard 1) > :grails-test-examples-scaffolding-fields:integrationTest (first 40 of 105)
CI / Functional Tests (Java 25, indy=false, shard 1) > :grails-test-examples-test-phases:integrationTest
CI / Functional Tests (Java 25, indy=false, shard 1) > :grails-test-examples-undertow:integrationTest
CI / Redis Tests (25, 7.4) > :grails-test-examples-redis:integrationTest
CI / Spring Security CAS Functional Tests (cas) > :grails-test-examples-spring-security-cas-test1:integrationTest
CI / Spring Security CAS Functional Tests (casNoSingleSignout) > :grails-test-examples-spring-security-cas-test1:integrationTest
CI / Spring Security CAS Functional Tests (casProxy) > :grails-test-examples-spring-security-cas-test1:integrationTest
CI / Spring Security Config Functional Tests (annotation) > :grails-test-examples-spring-security-core-functional-test-app:integrationTest (first 40 of 44)
CI / Spring Security Config Functional Tests (basic) > :grails-test-examples-spring-security-core-functional-test-app:integrationTest
CI / Spring Security Config Functional Tests (basicCacheUsers) > :grails-test-examples-spring-security-core-functional-test-app:integrationTest
CI / Spring Security Config Functional Tests (bcrypt) > :grails-test-examples-spring-security-core-functional-test-app:integrationTest
CI / Spring Security Config Functional Tests (issue503) > :grails-test-examples-spring-security-core-functional-test-app:integrationTest
CI / Spring Security Config Functional Tests (misc) > :grails-test-examples-spring-security-core-functional-test-app:integrationTest
CI / Spring Security Config Functional Tests (putWithParams) > :grails-test-examples-spring-security-core-functional-test-app:integrationTest
CI / Spring Security Config Functional Tests (requestmap) > :grails-test-examples-spring-security-core-functional-test-app:integrationTest
CI / Spring Security Config Functional Tests (static) > :grails-test-examples-spring-security-core-functional-test-app:integrationTest
CI / Spring Security Tests (Java 25, shard 1) > :grails-spring-security:test
CI / Spring Security Tests (Java 25, shard 1) > :grails-test-examples-spring-security-acl-functional-test-app:integrationTest (first 40 of 290)
CI / Spring Security Tests (Java 25, shard 1) > :grails-test-examples-spring-security-acl-integration-test-app:integrationTest (first 40 of 43)
CI / Spring Security Tests (Java 25, shard 1) > :grails-test-examples-spring-security-core-integration-test-app:integrationTest (first 40 of 67)
CI / Spring Security Tests (Java 25, shard 1) > :grails-test-examples-spring-security-core-misc-functional-test-app-group:integrationTest
CI / Spring Security Tests (Java 25, shard 1) > :grails-test-examples-spring-security-core-misc-functional-test-app-roles:integrationTest
CI / Spring Security Tests (Java 25, shard 1) > :grails-test-examples-spring-security-ldap-custom-user-details-context-mapper:integrationTest
CI / Spring Security Tests (Java 25, shard 1) > :grails-test-examples-spring-security-ldap-retrieve-db-roles:integrationTest
Groovy Snapshot Canary Build / Build Grails (shard 0) > :grails-cache:test
Groovy Snapshot Canary Build / Build Grails (shard 0) > :grails-data-graphql:test
Groovy Snapshot Canary Build / Build Grails (shard 0) > :grails-spring-security:test
Groovy Snapshot Canary Build / Build Grails (shard 1) > :grails-data-hibernate5-dbmigration:integrationTest
Groovy Snapshot Canary Build / Build Grails (shard 1) > :grails-data-hibernate5-dbmigration:integrationTestCli
Groovy Snapshot Canary Build / Build Grails (shard 1) > :grails-gsp:test (first 40 of 50)
Groovy Snapshot Canary Build / Build Grails (shard 1) > :grails-spring-security-ui:test
Groovy Snapshot Canary Build / Build Grails (shard 1) > :grails-test-examples-app4:integrationTest
Groovy Snapshot Canary Build / Build Grails (shard 1) > :grails-test-examples-app5:integrationTest
Groovy Snapshot Canary Build / Build Grails (shard 1) > :grails-test-examples-datasources:integrationTest
Groovy Snapshot Canary Build / Build Grails (shard 1) > :grails-test-examples-external-configuration:integrationTest (first 40 of 49)
Groovy Snapshot Canary Build / Build Grails (shard 1) > :grails-test-examples-geb-context-path:integrationTest
Groovy Snapshot Canary Build / Build Grails (shard 1) > :grails-test-examples-graphql-grails-docs-app:integrationTest
Groovy Snapshot Canary Build / Build Grails (shard 1) > :grails-test-examples-graphql-grails-tenant-app:integrationTest
Groovy Snapshot Canary Build / Build Grails (shard 1) > :grails-test-examples-graphql-grails-test-app:integrationTest
Groovy Snapshot Canary Build / Build Grails (shard 1) > :grails-test-examples-gsp-layout:integrationTest
Groovy Snapshot Canary Build / Build Grails (shard 1) > :grails-test-examples-gsp-layout:test
Groovy Snapshot Canary Build / Build Grails (shard 1) > :grails-test-examples-gsp-sitemesh3:integrationTest
Groovy Snapshot Canary Build / Build Grails (shard 1) > :grails-test-examples-hibernate7-datasources:integrationTest
Groovy Snapshot Canary Build / Build Grails (shard 1) > :grails-test-examples-hibernate7-grails-schema-per-tenant:integrationTest
Groovy Snapshot Canary Build / Build Grails (shard 1) > :grails-test-examples-hibernate7-issue-698-domain-save-npe:integrationTest
Groovy Snapshot Canary Build / Build Grails (shard 1) > :grails-test-examples-hibernate7-issue450:integrationTest
Groovy Snapshot Canary Build / Build Grails (shard 1) > :grails-test-examples-hibernate7-scaffolding-fields:integrationTest (first 40 of 105)
Groovy Snapshot Canary Build / Build Grails (shard 2) > :grails-data-hibernate7-dbmigration:integrationTest
Groovy Snapshot Canary Build / Build Grails (shard 2) > :grails-mail:test
Groovy Snapshot Canary Build / Build Grails (shard 2) > :grails-spring-security-rest:test
Groovy Snapshot Canary Build / Build Grails (shard 2) > :grails-test-examples-app2:integrationTest
Groovy Snapshot Canary Build / Build Grails (shard 2) > :grails-test-examples-app3:integrationTest
Groovy Snapshot Canary Build / Build Grails (shard 2) > :grails-test-examples-async-events-pubsub-demo:integrationTest
Groovy Snapshot Canary Build / Build Grails (shard 2) > :grails-test-examples-cache:integrationTest
Groovy Snapshot Canary Build / Build Grails (shard 2) > :grails-test-examples-config-report:integrationTest
SiteMesh 2 Compatibility / SiteMesh 2 Core Tests (Java 21) > :grails-cache:test
SiteMesh 2 Compatibility / SiteMesh 2 Core Tests (Java 21) > :grails-data-graphql:test
SiteMesh 2 Compatibility / SiteMesh 2 Core Tests (Java 21) > :grails-gsp:test (first 40 of 50)
SiteMesh 2 Compatibility / SiteMesh 2 Core Tests (Java 21) > :grails-mail:test
SiteMesh 2 Compatibility / SiteMesh 2 Functional Tests (Java 21, indy=false) > :grails-test-examples-gsp-layout:test
🏷️ Commit: 82fe9d8 Test Failures (first 10 of 3270)AjaxAwareAccessDeniedHandlerSpec (:grails-spring-security:test in Groovy Snapshot Canary Build / Build Grails (shard 0))AjaxAwareAuthenticationEntryPointSpec (:grails-spring-security:test in Groovy Snapshot Canary Build / Build Grails (shard 0))AjaxAwareAuthenticationFailureHandlerSpec (:grails-spring-security:test in Groovy Snapshot Canary Build / Build Grails (shard 0))AjaxAwareAuthenticationSuccessHandlerSpec (:grails-spring-security:test in Groovy Snapshot Canary Build / Build Grails (shard 0))AnnotationFilterInvocationDefinitionSpec (:grails-spring-security:test in Groovy Snapshot Canary Build / Build Grails (shard 0))AuthenticatedVetoableDecisionManagerSpec (:grails-spring-security:test in Groovy Snapshot Canary Build / Build Grails (shard 0))CacheTagLibSpec (:grails-cache:test in Groovy Snapshot Canary Build / Build Grails (shard 0))ChannelFilterInvocationSecurityMetadataSourceFactoryBeanSpec (:grails-spring-security:test in Groovy Snapshot Canary Build / Build Grails (shard 0))FilterSecurityInterceptorSpec (:grails-spring-security:test in Groovy Snapshot Canary Build / Build Grails (shard 0))GraphqlControllerSpec (:grails-data-graphql:test in Groovy Snapshot Canary Build / Build Grails (shard 0))Rerun Controls (first 20 of 3270)Note Checks are currently running using the configuration below. Select tests to mute in this pull request: 🔲 AbstractParentSpec > Test that persisting a domain class with an abstract parent works Reuse successful test results: 🔲 ♻️ Only rerun the tests that failed or were muted before Click the checkbox to trigger a rerun: 🔲 Rerun jobs Learn more about TestLens at testlens.app/docs. |
Summary
MediaTypeand integrate negotiation with Spring MVCJsonMapperfor ordinary JSON responses, with legacy compatibility fallbacksrender,respond, and direct serializationgrails-xmlmodule without changing XML plugin descriptorsapplication/problem+json; keep Vnd.Error opt-in and deprecate legacy XML error formatsgrails-spring-hateoasadapter module, deprecate HAL XML, and keep Atom/feed rendering opt-inLines of code
Added and removed counts come from
git diff --numstat upstream/8.0.x...HEAD; pure renames count as zero. Test sources are counted as tests.grails-docand Markdown files are counted as documentation. Build/module wiring is counted as production.Tests and documentation account for +2,096 LOC. Production is +1,570 net before future deprecated-code removal and +996 afterward. The remaining production growth implements Spring MVC negotiation/converter bridges, named Jackson configurations, Jackson domain compatibility, Problem Details, the optional XML boundary, and the optional Spring HATEOAS adapter.
The deprecated count is current source covered by
@Deprecated(since = "8.0", forRemoval = false): the legacy JSON configuration/marshaller API blocks plus Vnd.Error XML, legacy XML validation marshalling, and HAL XML renderer classes. These remain supported on 8.0.x for a deprecation cycle.Compatibility and migration
grails-xmlcontrols application HTTP XML payload support only.NamedJsonConfigurationRegistryreplacesJSON.createNamedConfig(...)andJSON.use(...)for named registration and direct serialization.render value, jsonConfiguration: 'deep'andrespond value, jsonConfiguration: 'deep'select the same registered Jackson configuration.grails-xmland opt the artefact into XML.Verification
Scoped affected-module tests, checks, dependency validation, profile builds, and guide builds passed with
--max-workers=2. The final named-Jackson change ran all tests and checks forgrails-web-common,grails-converters,grails-controllers, andgrails-rest-transforms, plus the Grails guide build.A full repository sweep was intentionally not run on the development machine because of its resource constraints; broader validation is left to CI.