Skip to content

Commit 36e63d7

Browse files
committed
Add support for Spring Boot 4.0.0-RC1.Fixes #3095
1 parent 9b2b393 commit 36e63d7

File tree

130 files changed

+1222
-741
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

130 files changed

+1222
-741
lines changed

pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<parent>
1212
<groupId>org.springframework.boot</groupId>
1313
<artifactId>spring-boot-starter-parent</artifactId>
14-
<version>4.0.0-M2</version>
14+
<version>4.0.0-RC1</version>
1515
</parent>
1616

1717
<licenses>
@@ -56,12 +56,12 @@
5656
</central-publishing-maven-plugin.version>
5757
<flatten-maven-plugin.version>1.5.0</flatten-maven-plugin.version>
5858
<swagger-api.version>2.2.38</swagger-api.version>
59-
<swagger-ui.version>5.30.0</swagger-ui.version>
59+
<swagger-ui.version>5.30.1</swagger-ui.version>
6060
<gmavenplus-plugin.version>1.13.1</gmavenplus-plugin.version>
6161
<jjwt.version>0.9.1</jjwt.version>
6262
<therapi-runtime-javadoc.version>0.15.0</therapi-runtime-javadoc.version>
6363
<spring-cloud-function.version>5.0.0-M1</spring-cloud-function.version>
64-
<spring-security-oauth2-authorization-server.version>2.0.0-M1
64+
<spring-security-oauth2-authorization-server.version>2.0.0-M2
6565
</spring-security-oauth2-authorization-server.version>
6666
<scalar.version>0.3.12</scalar.version>
6767
<skipPublishing>false</skipPublishing>

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/configuration/SpringDocConfiguration.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@
115115
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
116116
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
117117
import org.springframework.boot.autoconfigure.web.format.WebConversionService;
118-
import org.springframework.boot.data.autoconfigure.web.SpringDataWebProperties;
118+
import org.springframework.boot.data.autoconfigure.web.DataWebProperties;
119119
import org.springframework.context.MessageSource;
120120
import org.springframework.context.annotation.Bean;
121121
import org.springframework.context.annotation.Conditional;
@@ -589,7 +589,7 @@ WebConversionServiceProvider webConversionServiceProvider() {
589589
/**
590590
* The type Spring doc spring data web properties provider.
591591
*/
592-
@ConditionalOnClass(SpringDataWebProperties.class)
592+
@ConditionalOnClass(DataWebProperties.class)
593593
static class SpringDocSpringDataWebPropertiesProvider {
594594
/**
595595
* Spring data web properties provider spring data web properties provider.
@@ -600,7 +600,7 @@ static class SpringDocSpringDataWebPropertiesProvider {
600600
@Bean
601601
@ConditionalOnMissingBean
602602
@Lazy(false)
603-
SpringDataWebPropertiesProvider springDataWebPropertiesProvider(Optional<SpringDataWebProperties> optionalSpringDataWebProperties) {
603+
SpringDataWebPropertiesProvider springDataWebPropertiesProvider(Optional<DataWebProperties> optionalSpringDataWebProperties) {
604604
return new SpringDataWebPropertiesProvider(optionalSpringDataWebProperties);
605605
}
606606
}

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/configuration/SpringDocDataRestConfiguration.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828

2929
import java.util.Optional;
3030

31-
import com.fasterxml.jackson.databind.ObjectMapper;
3231
import org.springdoc.core.configuration.hints.SpringDocDataRestHints;
3332
import org.springdoc.core.converters.models.DefaultPageable;
3433
import org.springdoc.core.data.DataRestOperationService;
@@ -42,12 +41,11 @@
4241
import org.springdoc.core.providers.ObjectMapperProvider;
4342
import org.springdoc.core.providers.SpringRepositoryRestResourceProvider;
4443
import org.springdoc.core.service.AbstractRequestService;
45-
import org.springdoc.core.service.GenericParameterService;
4644
import org.springdoc.core.service.GenericResponseService;
4745
import org.springdoc.core.service.OpenAPIService;
4846
import org.springdoc.core.service.OperationService;
49-
import org.springdoc.core.service.RequestBodyService;
5047
import org.springdoc.core.utils.SpringDocDataRestUtils;
48+
import tools.jackson.databind.ObjectMapper;
5149

5250
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
5351
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/configuration/SpringDocKotlinConfiguration.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,7 @@
2727
package org.springdoc.core.configuration
2828

2929
import org.springdoc.core.converters.KotlinInlineClassUnwrappingConverter
30-
import org.springdoc.core.customizers.DelegatingMethodParameterCustomizer
3130
import org.springdoc.core.customizers.KotlinDeprecatedPropertyCustomizer
32-
import org.springdoc.core.extractor.DelegatingMethodParameter
3331
import org.springdoc.core.providers.ObjectMapperProvider
3432
import org.springdoc.core.utils.Constants
3533
import org.springdoc.core.utils.SpringDocKotlinUtils
@@ -44,7 +42,6 @@ import org.springframework.context.annotation.Bean
4442
import org.springframework.context.annotation.Configuration
4543
import org.springframework.context.annotation.Lazy
4644
import kotlin.coroutines.Continuation
47-
import kotlin.reflect.full.primaryConstructor
4845

4946
/**
5047
* The type Spring doc kotlin configuration.

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/data/DataRestResponseService.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -297,16 +297,14 @@ private Type getTypeForCollectionModel(Class returnedEntityType, boolean pagingR
297297
*/
298298
private Type getTypeForWildcardType(RequestMethod requestMethod, DataRestRepository dataRestRepository, Class returnedEntityType, ParameterizedType parameterizedType) {
299299
WildcardType wildcardType = (WildcardType) parameterizedType.getActualTypeArguments()[0];
300+
Class<?> type = findType(requestMethod, dataRestRepository);
300301
if (wildcardType.getUpperBounds()[0] instanceof ParameterizedType wildcardTypeUpperBound) {
301302
if (RepresentationModel.class.equals(wildcardTypeUpperBound.getRawType())) {
302-
Class<?> type = findType(requestMethod, dataRestRepository);
303303
if (MapModel.class.equals(type))
304304
return ResolvableType.forClassWithGenerics(ResponseEntity.class, type).getType();
305-
else
306-
return resolveGenericType(ResponseEntity.class, type, returnedEntityType);
307305
}
308306
}
309-
return null;
307+
return resolveGenericType(ResponseEntity.class, type, returnedEntityType);
310308
}
311309

312310
/**
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package org.springdoc.core.data;
2+
3+
import com.fasterxml.jackson.core.Version;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import com.fasterxml.jackson.databind.module.SimpleModule;
6+
7+
import org.springframework.hateoas.CollectionModel;
8+
import org.springframework.hateoas.Link;
9+
import org.springframework.hateoas.RepresentationModel;
10+
import org.springframework.hateoas.mediatype.hal.CollectionModelMixin;
11+
import org.springframework.hateoas.mediatype.hal.LinkMixin;
12+
import org.springframework.hateoas.mediatype.hal.RepresentationModelMixin;
13+
import org.springframework.util.Assert;
14+
15+
/**
16+
* Jackson 2 module implementation
17+
*
18+
* @author bnasslahsen
19+
*/
20+
public class SpringDocJackson2HalModule extends SimpleModule {
21+
22+
private static final long serialVersionUID = 7806951456457932384L;
23+
24+
/**
25+
* Instantiates a new Spring doc jackson 2 hal module.
26+
*/
27+
public SpringDocJackson2HalModule() {
28+
29+
super("json-hal-module", new Version(1, 0, 0, null, "org.springframework.hateoas", "spring-hateoas"));
30+
31+
setMixInAnnotation(Link.class, LinkMixin.class);
32+
setMixInAnnotation(RepresentationModel.class, RepresentationModelMixin.class);
33+
setMixInAnnotation(CollectionModel.class, CollectionModelMixin.class);
34+
}
35+
36+
37+
/**
38+
* Is already registered in boolean.
39+
*
40+
* @param mapper the mapper
41+
* @return the boolean
42+
*/
43+
public static boolean isAlreadyRegisteredIn(ObjectMapper mapper) {
44+
45+
Assert.notNull(mapper, "ObjectMapper must not be null!");
46+
return LinkMixin.class.equals(mapper.findMixInClassFor(Link.class));
47+
}
48+
49+
50+
51+
}

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/providers/DataRestHalProvider.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,11 @@
2828

2929
import java.util.Optional;
3030

31+
import org.springdoc.core.data.SpringDocJackson2HalModule;
32+
3133
import org.springframework.beans.factory.InitializingBean;
3234
import org.springframework.boot.hateoas.autoconfigure.HateoasProperties;
3335
import org.springframework.data.rest.core.config.RepositoryRestConfiguration;
34-
import org.springframework.hateoas.mediatype.hal.Jackson2HalModule;
3536

3637
/**
3738
* The type Data rest hal provider.
@@ -62,8 +63,8 @@ public DataRestHalProvider(Optional<RepositoryRestConfiguration> repositoryRestC
6263
public void afterPropertiesSet() {
6364
if (!isHalEnabled())
6465
return;
65-
if (!Jackson2HalModule.isAlreadyRegisteredIn(objectMapperProvider.jsonMapper()))
66-
objectMapperProvider.jsonMapper().registerModule(new Jackson2HalModule());
66+
if (!SpringDocJackson2HalModule.isAlreadyRegisteredIn(objectMapperProvider.jsonMapper()))
67+
objectMapperProvider.jsonMapper().registerModule(new SpringDocJackson2HalModule());
6768
}
6869

6970
@Override

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/providers/HateoasHalProvider.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,10 @@
2929
import java.util.List;
3030
import java.util.Optional;
3131

32+
import org.springdoc.core.data.SpringDocJackson2HalModule;
33+
3234
import org.springframework.beans.factory.InitializingBean;
3335
import org.springframework.boot.hateoas.autoconfigure.HateoasProperties;
34-
import org.springframework.hateoas.mediatype.hal.Jackson2HalModule;
3536
import org.springframework.lang.NonNull;
3637
import org.springframework.util.ReflectionUtils;
3738

@@ -103,8 +104,8 @@ public void afterPropertiesSet() {
103104
return;
104105
}
105106
var mapper = objectMapperProvider.jsonMapper();
106-
if (!Jackson2HalModule.isAlreadyRegisteredIn(mapper)) {
107-
mapper.registerModule(new Jackson2HalModule());
107+
if (!SpringDocJackson2HalModule.isAlreadyRegisteredIn(mapper)) {
108+
mapper.registerModule(new SpringDocJackson2HalModule());
108109
}
109110
}
110111
}

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/providers/SpringDataWebPropertiesProvider.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
import java.util.Optional;
2929

30-
import org.springframework.boot.data.autoconfigure.web.SpringDataWebProperties;
30+
import org.springframework.boot.data.autoconfigure.web.DataWebProperties;
3131

3232

3333
/**
@@ -41,14 +41,14 @@ public class SpringDataWebPropertiesProvider {
4141
/**
4242
* The Optional spring data web properties.
4343
*/
44-
private final Optional<SpringDataWebProperties> optionalSpringDataWebProperties;
44+
private final Optional<DataWebProperties> optionalSpringDataWebProperties;
4545

4646
/**
4747
* Instantiates a new Spring data web properties provider.
4848
*
4949
* @param optionalSpringDataWebProperties the optional spring data web properties
5050
*/
51-
public SpringDataWebPropertiesProvider(Optional<SpringDataWebProperties> optionalSpringDataWebProperties) {
51+
public SpringDataWebPropertiesProvider(Optional<DataWebProperties> optionalSpringDataWebProperties) {
5252
this.optionalSpringDataWebProperties = optionalSpringDataWebProperties;
5353
}
5454

@@ -57,7 +57,7 @@ public SpringDataWebPropertiesProvider(Optional<SpringDataWebProperties> optiona
5757
*
5858
* @return the spring data web properties
5959
*/
60-
public SpringDataWebProperties getSpringDataWebProperties() {
60+
public DataWebProperties getSpringDataWebProperties() {
6161
return optionalSpringDataWebProperties.orElse(null);
6262
}
6363

springdoc-openapi-starter-common/src/main/java/org/springdoc/core/providers/SpringRepositoryRestResourceProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
import java.util.stream.Collectors;
3535
import java.util.stream.Stream;
3636

37-
import com.fasterxml.jackson.databind.ObjectMapper;
3837
import io.swagger.v3.oas.annotations.Hidden;
3938
import io.swagger.v3.oas.models.OpenAPI;
4039
import org.apache.commons.lang3.reflect.MethodUtils;
@@ -45,6 +44,7 @@
4544
import org.springdoc.core.data.DataRestRouterOperationService;
4645
import org.springdoc.core.fn.RouterOperation;
4746
import org.springdoc.core.utils.SpringDocDataRestUtils;
47+
import tools.jackson.databind.ObjectMapper;
4848

4949
import org.springframework.beans.BeansException;
5050
import org.springframework.context.ApplicationContext;

0 commit comments

Comments
 (0)