Fix support of application/hal+json

Closes gh-143
This commit is contained in:
Stephane Nicoll
2015-12-10 09:59:21 +01:00
parent 6630e2fc99
commit 1b3c5c803b
2 changed files with 20 additions and 2 deletions

View File

@@ -50,6 +50,8 @@ import org.springframework.web.bind.annotation.ResponseBody
@Slf4j
class MainController extends AbstractInitializrController {
static final MediaType HAL_JSON_CONTENT_TYPE = MediaType.parseMediaType('application/hal+json')
@Autowired
private ProjectGenerator projectGenerator
@@ -76,7 +78,7 @@ class MainController extends AbstractInitializrController {
@RequestMapping(value = "/", produces = ["text/plain"])
ResponseEntity<String> serviceCapabilities(
ResponseEntity<String> serviceCapabilitiesText(
@RequestHeader(value = HttpHeaders.USER_AGENT, required = false) String userAgent) {
String appUrl = generateAppUrl()
def metadata = metadataProvider.get()
@@ -96,6 +98,11 @@ class MainController extends AbstractInitializrController {
builder.body(commandLineHelpGenerator.generateGenericCapabilities(metadata, appUrl))
}
@RequestMapping(value = "/", produces = ["application/hal+json"])
ResponseEntity<String> serviceCapabilitiesHal() {
serviceCapabilitiesFor(InitializrMetadataVersion.V2_1, HAL_JSON_CONTENT_TYPE)
}
@RequestMapping(value = "/", produces = ["application/vnd.initializr.v2.1+json", "application/json"])
ResponseEntity<String> serviceCapabilitiesV21() {
serviceCapabilitiesFor(InitializrMetadataVersion.V2_1)
@@ -107,9 +114,13 @@ class MainController extends AbstractInitializrController {
}
private ResponseEntity<String> serviceCapabilitiesFor(InitializrMetadataVersion version) {
serviceCapabilitiesFor(version, version.mediaType)
}
private ResponseEntity<String> serviceCapabilitiesFor(InitializrMetadataVersion version, MediaType contentType) {
String appUrl = generateAppUrl()
def content = getJsonMapper(version).write(metadataProvider.get(), appUrl)
return ResponseEntity.ok().contentType(version.mediaType).body(content)
return ResponseEntity.ok().contentType(contentType).body(content)
}
private static InitializrMetadataJsonMapper getJsonMapper(InitializrMetadataVersion version) {

View File

@@ -181,6 +181,13 @@ class MainControllerIntegrationTests extends AbstractInitializrControllerIntegra
validateCurrentMetadata(new JSONObject(response.body))
}
@Test
void metadataWithHalAcceptHeader() {
ResponseEntity<String> response = invokeHome(null, 'application/hal+json')
validateContentType(response, MainController.HAL_JSON_CONTENT_TYPE)
validateCurrentMetadata(new JSONObject(response.body))
}
@Test
void metadataWithUnknownAcceptHeader() {
try {