Skip to content

Commit 274d842

Browse files
committed
Allow extension of ProjectMetadataController
Closes gh-1625
1 parent 7805de6 commit 274d842

File tree

3 files changed

+50
-18
lines changed

3 files changed

+50
-18
lines changed

initializr-web/src/main/java/io/spring/initializr/web/controller/AbstractMetadataController.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ private boolean isForceSsl() {
6262
this.forceSsl = this.metadataProvider.get().getConfiguration().getEnv().isForceSsl();
6363
}
6464
return this.forceSsl;
65-
6665
}
6766

6867
}

initializr-web/src/main/java/io/spring/initializr/web/controller/ProjectMetadataController.java

Lines changed: 49 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import io.spring.initializr.metadata.InitializrMetadata;
2727
import io.spring.initializr.metadata.InitializrMetadataProvider;
2828
import io.spring.initializr.metadata.InvalidInitializrMetadataException;
29+
import io.spring.initializr.web.mapper.DependencyMetadataJsonMapper;
2930
import io.spring.initializr.web.mapper.DependencyMetadataV21JsonMapper;
3031
import io.spring.initializr.web.mapper.InitializrMetadataJsonMapper;
3132
import io.spring.initializr.web.mapper.InitializrMetadataV21JsonMapper;
@@ -48,6 +49,7 @@
4849
* {@link RestController} that exposes metadata and service configuration.
4950
*
5051
* @author Stephane Nicoll
52+
* @author Moritz Halbritter
5153
*/
5254
@RestController
5355
public class ProjectMetadataController extends AbstractMetadataController {
@@ -124,32 +126,47 @@ protected CacheControl determineCacheControlFor(InitializrMetadata metadata) {
124126
return CacheControl.maxAge(2, TimeUnit.HOURS);
125127
}
126128

127-
private ResponseEntity<String> dependenciesFor(InitializrMetadataVersion version, String bootVersion) {
129+
/**
130+
* Create the dependencies {@link ResponseEntity} for the given version and Spring
131+
* Boot version.
132+
* @param metadataVersion the metadata version
133+
* @param bootVersion the Spring Boot version.
134+
* @return the {@link ResponseEntity}
135+
*/
136+
protected ResponseEntity<String> dependenciesFor(InitializrMetadataVersion metadataVersion, String bootVersion) {
128137
InitializrMetadata metadata = this.metadataProvider.get();
129-
Version v = (bootVersion != null) ? Version.parse(bootVersion)
138+
Version effectiveBootVersion = (bootVersion != null) ? Version.parse(bootVersion)
130139
: Version.parse(metadata.getBootVersions().getDefault().getId());
131140
Platform platform = metadata.getConfiguration().getEnv().getPlatform();
132-
if (!platform.isCompatibleVersion(v)) {
141+
if (!platform.isCompatibleVersion(effectiveBootVersion)) {
133142
throw new InvalidProjectRequestException("Invalid Spring Boot version '" + bootVersion
134143
+ "', Spring Boot compatibility range is " + platform.determineCompatibilityRangeRequirement());
135144
}
136-
DependencyMetadata dependencyMetadata = this.dependencyMetadataProvider.get(metadata, v);
137-
String content = new DependencyMetadataV21JsonMapper().write(dependencyMetadata);
145+
DependencyMetadata dependencyMetadata = this.dependencyMetadataProvider.get(metadata, effectiveBootVersion);
146+
String content = createDependencyJsonMapper(metadataVersion).write(dependencyMetadata);
138147
return ResponseEntity.ok()
139-
.contentType(version.getMediaType())
148+
.contentType(metadataVersion.getMediaType())
140149
.eTag(createUniqueId(content))
141150
.cacheControl(determineCacheControlFor(metadata))
142151
.body(content);
143152
}
144153

145-
private ResponseEntity<String> serviceCapabilitiesFor(InitializrMetadataVersion version) {
146-
return serviceCapabilitiesFor(version, version.getMediaType());
154+
private ResponseEntity<String> serviceCapabilitiesFor(InitializrMetadataVersion metadataVersion) {
155+
return serviceCapabilitiesFor(metadataVersion, metadataVersion.getMediaType());
147156
}
148157

149-
private ResponseEntity<String> serviceCapabilitiesFor(InitializrMetadataVersion version, MediaType contentType) {
158+
/**
159+
* Create the service capabilities {@link ResponseEntity} for the given metadata
160+
* version and content type.
161+
* @param metadataVersion the metadata version
162+
* @param contentType the content type
163+
* @return the {@link ResponseEntity}
164+
*/
165+
protected ResponseEntity<String> serviceCapabilitiesFor(InitializrMetadataVersion metadataVersion,
166+
MediaType contentType) {
150167
String appUrl = generateAppUrl();
151168
InitializrMetadata metadata = this.metadataProvider.get();
152-
String content = getJsonMapper(version).write(metadata, appUrl);
169+
String content = createMetadataJsonMapper(metadataVersion).write(metadata, appUrl);
153170
return ResponseEntity.ok()
154171
.contentType(contentType)
155172
.eTag(createUniqueId(content))
@@ -158,12 +175,28 @@ private ResponseEntity<String> serviceCapabilitiesFor(InitializrMetadataVersion
158175
.body(content);
159176
}
160177

161-
private static InitializrMetadataJsonMapper getJsonMapper(InitializrMetadataVersion version) {
162-
return switch (version) {
163-
case V2 -> new InitializrMetadataV2JsonMapper();
164-
case V2_1 -> new InitializrMetadataV21JsonMapper();
165-
default -> new InitializrMetadataV22JsonMapper();
166-
};
178+
/**
179+
* Create the {@link InitializrMetadataJsonMapper JSON mapper} for the given metadata
180+
* version.
181+
* @param metadataVersion the metadata version
182+
* @return the JSON mapper
183+
*/
184+
protected InitializrMetadataJsonMapper createMetadataJsonMapper(InitializrMetadataVersion metadataVersion) {
185+
return switch (metadataVersion) {
186+
case V2 -> new InitializrMetadataV2JsonMapper();
187+
case V2_1 -> new InitializrMetadataV21JsonMapper();
188+
default -> new InitializrMetadataV22JsonMapper();
189+
};
190+
}
191+
192+
/**
193+
* Create the {@link DependencyMetadataJsonMapper JSON mapper} for the given metadata
194+
* version.
195+
* @param metadataVersion the metadata version
196+
* @return the JSON mapper
197+
*/
198+
protected DependencyMetadataJsonMapper createDependencyJsonMapper(InitializrMetadataVersion metadataVersion) {
199+
return new DependencyMetadataV21JsonMapper();
167200
}
168201

169202
}

initializr-web/src/main/java/io/spring/initializr/web/mapper/DependencyMetadataJsonMapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
*
2424
* @author Stephane Nicoll
2525
*/
26-
interface DependencyMetadataJsonMapper {
26+
public interface DependencyMetadataJsonMapper {
2727

2828
/**
2929
* Write a json representation of the specified metadata.

0 commit comments

Comments
 (0)