Merge pull request #600 from sdeleuze:jackson-kotlin

* pr/600:
  Polish "Add jackson-module-kotlin dependency when appropriate"
  Add jackson-module-kotlin dependency when appropriate
This commit is contained in:
Stephane Nicoll 2018-02-12 15:50:15 +01:00
commit 378623fcc0
3 changed files with 135 additions and 0 deletions

View File

@ -0,0 +1,51 @@
/*
* Copyright 2012-2018 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.spring.initializr.service.extension;
import io.spring.initializr.generator.ProjectRequest;
import io.spring.initializr.generator.ProjectRequestPostProcessor;
import io.spring.initializr.metadata.Dependency;
import io.spring.initializr.metadata.InitializrMetadata;
import org.springframework.stereotype.Component;
/**
* A {@link ProjectRequestPostProcessor} that automatically adds "jackson-module-kotlin"
* when Kotlin is used and a dependency has the "json" facet.
*
* @author Sebastien Deleuze
*/
@Component
class JacksonKotlinRequestPostProcessor implements ProjectRequestPostProcessor {
private final Dependency jacksonModuleKotlin;
public JacksonKotlinRequestPostProcessor() {
this.jacksonModuleKotlin = Dependency.withId("jackson-module-kotlin",
"com.fasterxml.jackson.module", "jackson-module-kotlin");
}
@Override
public void postProcessAfterResolution(ProjectRequest request,
InitializrMetadata metadata) {
if (request.getFacets().contains("json")
&& "kotlin".equals(request.getLanguage())) {
request.getResolvedDependencies().add(this.jacksonModuleKotlin);
}
}
}

View File

@ -284,6 +284,7 @@ initializr:
weight: 100
facets:
- web
- json
links:
- rel: guide
href: https://spring.io/guides/gs/rest-service/
@ -301,9 +302,13 @@ initializr:
versionRange: 2.0.0.M1
description: Reactive web development with Netty and Spring WebFlux
weight: 90
facets:
- json
- name: Rest Repositories
id: data-rest
weight: 10
facets:
- json
description: Exposing Spring Data repositories over REST via spring-data-rest-webmvc
links:
- rel: guide
@ -353,6 +358,8 @@ initializr:
- name: Jersey (JAX-RS)
id: jersey
description: RESTful Web Services framework with support of JAX-RS
facets:
- json
versionRange: 1.2.0.RELEASE
links:
- rel: reference

View File

@ -0,0 +1,77 @@
/*
* Copyright 2012-2017 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.spring.initializr.service.extension;
import io.spring.initializr.generator.ProjectRequest;
import io.spring.initializr.metadata.Dependency;
import org.junit.Test;
/**
* Tests for {@link JacksonKotlinRequestPostProcessor}.
*
* @author Sebastien Deleuze
* @author Stephane Nicoll
*/
public class JacksonKotlinRequestPostProcessorTests
extends AbstractRequestPostProcessorTests {
static final Dependency JACKSON_KOTLIN = Dependency.withId("jackson-module-kotlin",
"com.fasterxml.jackson.module", "jackson-module-kotlin");
static final Dependency REACTOR_TEST = Dependency.create(
"io.projectreactor", "reactor-test", null, Dependency.SCOPE_TEST);
@Test
public void jacksonModuleKotlinIsAdded() {
ProjectRequest request = createProjectRequest("webflux");
request.setBootVersion("2.0.0.M2");
request.setLanguage("kotlin");
generateMavenPom(request)
.hasSpringBootStarterDependency("webflux")
.hasDependency(JACKSON_KOTLIN)
.hasSpringBootStarterTest()
.hasDependency(REACTOR_TEST)
.hasDependency("org.jetbrains.kotlin", "kotlin-reflect")
.hasDependency("org.jetbrains.kotlin", "kotlin-stdlib-jdk8")
.hasDependenciesCount(6);
}
@Test
public void jacksonModuleKotlinIsNotAddedWithoutKotlin() {
ProjectRequest request = createProjectRequest("webflux");
request.setBootVersion("2.0.0.M2");
generateMavenPom(request)
.hasSpringBootStarterDependency("webflux")
.hasSpringBootStarterTest()
.hasDependency(REACTOR_TEST)
.hasDependenciesCount(3);
}
@Test
public void jacksonModuleKotlinIsNotAddedWithoutJsonFacet() {
ProjectRequest request = createProjectRequest("actuator");
request.setBootVersion("2.0.0.M2");
request.setLanguage("kotlin");
generateMavenPom(request)
.hasSpringBootStarterDependency("actuator")
.hasSpringBootStarterTest()
.hasDependency("org.jetbrains.kotlin", "kotlin-reflect")
.hasDependency("org.jetbrains.kotlin", "kotlin-stdlib-jdk8")
.hasDependenciesCount(4);
}
}