Skip to content

Commit b27ab3d

Browse files
authored
Fix @ConditionalOnClass loading of optional components on Spring Boot (#328)
Fixes #327
1 parent 8b19e2f commit b27ab3d

5 files changed

Lines changed: 92 additions & 58 deletions

File tree

belgif-rest-problem-spring-boot-3-client-starter/src/main/java/io/github/belgif/rest/problem/spring/client/ClientProblemAutoConfiguration.java

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,22 +29,29 @@ public ProblemResponseErrorHandler problemResponseErrorHandler(ObjectMapper obje
2929
}
3030

3131
@ConditionalOnClass({ RestClient.class, RestClientCustomizer.class })
32-
@Bean
33-
public ProblemRestClientCustomizer
34-
problemRestClientCustomizer(ProblemResponseErrorHandler problemResponseErrorHandler) {
35-
return new ProblemRestClientCustomizer(problemResponseErrorHandler);
32+
public static class RestClientProblemConfiguration {
33+
@Bean
34+
public ProblemRestClientCustomizer
35+
problemRestClientCustomizer(ProblemResponseErrorHandler problemResponseErrorHandler) {
36+
return new ProblemRestClientCustomizer(problemResponseErrorHandler);
37+
}
3638
}
3739

3840
@ConditionalOnClass({ RestTemplate.class, RestTemplateCustomizer.class })
39-
@Bean
40-
public ProblemRestTemplateCustomizer
41-
problemRestTemplateCustomizer(ProblemResponseErrorHandler problemResponseErrorHandler) {
42-
return new ProblemRestTemplateCustomizer(problemResponseErrorHandler);
41+
public static class RestTemplateProblemConfiguration {
42+
@Bean
43+
public ProblemRestTemplateCustomizer
44+
problemRestTemplateCustomizer(ProblemResponseErrorHandler problemResponseErrorHandler) {
45+
return new ProblemRestTemplateCustomizer(problemResponseErrorHandler);
46+
}
4347
}
4448

4549
@ConditionalOnClass({ WebClient.class, WebClientCustomizer.class })
46-
@Bean
47-
public ProblemWebClientCustomizer problemWebClientCustomizer() {
48-
return new ProblemWebClientCustomizer();
50+
public static class WebClientProblemConfiguration {
51+
@Bean
52+
public ProblemWebClientCustomizer problemWebClientCustomizer() {
53+
return new ProblemWebClientCustomizer();
54+
}
4955
}
56+
5057
}

belgif-rest-problem-spring-boot-3-server-starter/src/main/java/io/github/belgif/rest/problem/spring/server/ServerProblemAutoConfiguration.java

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,6 @@
2222
@Import({ io.github.belgif.rest.problem.spring.ProblemJackson2Configuration.class, JacksonAutoConfiguration.class })
2323
public class ServerProblemAutoConfiguration {
2424

25-
private ObjectMapper objectMapper;
26-
27-
public ServerProblemAutoConfiguration(ObjectMapper objectMapper) {
28-
this.objectMapper = objectMapper;
29-
}
30-
31-
@ConditionalOnClass(ConstraintViolationException.class)
32-
@Bean
33-
public BeanValidationExceptionsHandler beanValidationExceptionsHandler() {
34-
return new BeanValidationExceptionsHandler();
35-
}
36-
3725
@Bean
3826
public ProblemExceptionHandler problemExceptionHandler() {
3927
return new ProblemExceptionHandler();
@@ -44,15 +32,34 @@ public RoutingExceptionsJackson2Handler routingExceptionsHandler() {
4432
return new RoutingExceptionsJackson2Handler();
4533
}
4634

35+
@ConditionalOnClass(ConstraintViolationException.class)
36+
public static class BeanValidationProblemConfiguration {
37+
@Bean
38+
public BeanValidationExceptionsHandler beanValidationExceptionsHandler() {
39+
return new BeanValidationExceptionsHandler();
40+
}
41+
}
42+
4743
@ConditionalOnClass({ Configuration.class, ValidationConfigurationCustomizer.class })
48-
@Bean
49-
public ProblemValidationConfigurationCustomizer problemValidationConfigurationCustomizer() {
50-
return new ProblemValidationConfigurationCustomizer();
44+
public static class BeanValidationConfigurationProblemConfiguration {
45+
@Bean
46+
public ProblemValidationConfigurationCustomizer problemValidationConfigurationCustomizer() {
47+
return new ProblemValidationConfigurationCustomizer();
48+
}
5149
}
5250

5351
@ConditionalOnClass(InvalidRequestException.class)
54-
@Bean
55-
public InvalidRequestExceptionJackson2Handler invalidRequestExceptionHandler() {
56-
return new InvalidRequestExceptionJackson2Handler(objectMapper);
52+
public static class SwaggerValidatorProblemConfiguration {
53+
private final ObjectMapper objectMapper;
54+
55+
public SwaggerValidatorProblemConfiguration(ObjectMapper objectMapper) {
56+
this.objectMapper = objectMapper;
57+
}
58+
59+
@Bean
60+
public InvalidRequestExceptionJackson2Handler invalidRequestExceptionHandler() {
61+
return new InvalidRequestExceptionJackson2Handler(objectMapper);
62+
}
5763
}
64+
5865
}

belgif-rest-problem-spring-boot-4-client-starter/src/main/java/io/github/belgif/rest/problem/spring/client/ClientProblemAutoConfiguration.java

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,22 +27,29 @@ public ProblemResponseErrorHandler problemResponseErrorHandler(ObjectMapper obje
2727
}
2828

2929
@ConditionalOnClass({ RestClient.class, RestClientCustomizer.class })
30-
@Bean
31-
public ProblemRestClientCustomizer
32-
problemRestClientCustomizer(ProblemResponseErrorHandler problemResponseErrorHandler) {
33-
return new ProblemRestClientCustomizer(problemResponseErrorHandler);
30+
public static class RestClientProblemConfiguration {
31+
@Bean
32+
public ProblemRestClientCustomizer
33+
problemRestClientCustomizer(ProblemResponseErrorHandler problemResponseErrorHandler) {
34+
return new ProblemRestClientCustomizer(problemResponseErrorHandler);
35+
}
3436
}
3537

3638
@ConditionalOnClass({ RestTemplate.class, RestTemplateCustomizer.class })
37-
@Bean
38-
public ProblemRestTemplateCustomizer
39-
problemRestTemplateCustomizer(ProblemResponseErrorHandler problemResponseErrorHandler) {
40-
return new ProblemRestTemplateCustomizer(problemResponseErrorHandler);
39+
public static class RestTemplateProblemConfiguration {
40+
@Bean
41+
public ProblemRestTemplateCustomizer
42+
problemRestTemplateCustomizer(ProblemResponseErrorHandler problemResponseErrorHandler) {
43+
return new ProblemRestTemplateCustomizer(problemResponseErrorHandler);
44+
}
4145
}
4246

4347
@ConditionalOnClass({ WebClient.class, WebClientCustomizer.class })
44-
@Bean
45-
public ProblemWebClientCustomizer problemWebClientCustomizer() {
46-
return new ProblemWebClientCustomizer();
48+
public static class WebClientProblemConfiguration {
49+
@Bean
50+
public ProblemWebClientCustomizer problemWebClientCustomizer() {
51+
return new ProblemWebClientCustomizer();
52+
}
4753
}
54+
4855
}

belgif-rest-problem-spring-boot-4-server-starter/src/main/java/io/github/belgif/rest/problem/spring/server/ServerProblemAutoConfiguration.java

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,6 @@
2323
@Import({ io.github.belgif.rest.problem.spring.ProblemJackson3Configuration.class, JacksonAutoConfiguration.class })
2424
public class ServerProblemAutoConfiguration {
2525

26-
private ObjectMapper objectMapper;
27-
28-
public ServerProblemAutoConfiguration(ObjectMapper objectMapper) {
29-
this.objectMapper = objectMapper;
30-
}
31-
32-
@ConditionalOnClass(ConstraintViolationException.class)
33-
@Bean
34-
public BeanValidationExceptionsHandler beanValidationExceptionsHandler() {
35-
return new BeanValidationExceptionsHandler();
36-
}
37-
3826
@Bean
3927
public ProblemExceptionHandler problemExceptionHandler() {
4028
return new ProblemExceptionHandler();
@@ -45,15 +33,34 @@ public RoutingExceptionsJackson3Handler routingExceptionsHandler() {
4533
return new RoutingExceptionsJackson3Handler();
4634
}
4735

36+
@ConditionalOnClass(ConstraintViolationException.class)
37+
public static class BeanValidationProblemConfiguration {
38+
@Bean
39+
public BeanValidationExceptionsHandler beanValidationExceptionsHandler() {
40+
return new BeanValidationExceptionsHandler();
41+
}
42+
}
43+
4844
@ConditionalOnClass({ Configuration.class, ValidationConfigurationCustomizer.class })
49-
@Bean
50-
public ProblemValidationConfigurationCustomizer problemValidationConfigurationCustomizer() {
51-
return new ProblemValidationConfigurationCustomizer();
45+
public static class BeanValidationConfigurationProblemConfiguration {
46+
@Bean
47+
public ProblemValidationConfigurationCustomizer problemValidationConfigurationCustomizer() {
48+
return new ProblemValidationConfigurationCustomizer();
49+
}
5250
}
5351

5452
@ConditionalOnClass(InvalidRequestException.class)
55-
@Bean
56-
public InvalidRequestExceptionJackson3Handler invalidRequestExceptionHandler() {
57-
return new InvalidRequestExceptionJackson3Handler(objectMapper);
53+
public static class SwaggerRequestValidationConfiguration {
54+
private final ObjectMapper objectMapper;
55+
56+
public SwaggerRequestValidationConfiguration(ObjectMapper objectMapper) {
57+
this.objectMapper = objectMapper;
58+
}
59+
60+
@Bean
61+
public InvalidRequestExceptionJackson3Handler invalidRequestExceptionHandler() {
62+
return new InvalidRequestExceptionJackson3Handler(objectMapper);
63+
}
5864
}
65+
5966
}

src/main/asciidoc/release-notes.adoc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@
1212

1313
// tag::recent-versions[]
1414

15+
== Version 0.22
16+
17+
*belgif-rest-problem-spring-boot-**:
18+
19+
* Fix `@ConditionalOnClass` loading of optional components
20+
1521
== Version 0.21
1622

1723
*belgif-rest-problem:*

0 commit comments

Comments
 (0)