This commit implements the components described in DATAREST-40. The core of it is the ResourceProcessingHandlerMethodReturnValueHandler. It gets ResourceProcessor and ResourcesProcessor instances handed into its constructor and selects the ones that need to be invoked in the calls to handleReturnValue(…). In this process it does a variety of generics checks to ensure only the correct post-processors. To do so it inspects the controller method's return type, the object value type as well as the returned value potentially. Assume we have a specialized Resource type StringResource extends Resource<String>. Beyond that we have a ResourceProcessor<Resource<String>> registered. Here's the decision matrix: Return type Returned type What get's used? Resource<?> Resource<String> object value inspected (Resource.getContent()) Resource<String> Resource<String> method return type Resource<String> StringResource object value type as it's more specialized StringResource StringResource method return type Resource<?> Resource<Long> no invocation, object value doesn't match Resource<? extends Number> Resource<Long> no invocation, object value doesn't match Resource<Long> Resource<Long> no invocation, object value doesn't match This works exactly the same for Resources returned. We peek into the collection returned by getContent() in case return value inspection is needed for type matches. If the collection is empty we don't match. The same applies to null values returned. The second component added is the ResourcePostProcessorInvokingHandlerAdapter which customizes the setup of a RequestMappingHandlerAdapter by fronting the current configuration with the ResourceProcessingHandlerMethodReturnValueHandler to let it intercept the handling and potentially call the post-processors. Upgraded to snapshots of Spring Data Commons until we get to the next release and added Mockito as dependency.
107 lines
3.0 KiB
Groovy
107 lines
3.0 KiB
Groovy
apply plugin: "base"
|
|
|
|
allprojects {
|
|
apply plugin: "idea"
|
|
apply plugin: "eclipse"
|
|
apply plugin: "maven"
|
|
|
|
group = "org.springframework.data"
|
|
version = "$sdRestVersion"
|
|
|
|
configurations.all {
|
|
exclude group: "commons-logging"
|
|
exclude module: "slf4j-log4j12"
|
|
exclude module: "groovy-all", version: "1.8.0-beta-3-SNAPSHOT"
|
|
}
|
|
|
|
repositories {
|
|
maven { url "http://repo.springsource.org/libs-snapshot" }
|
|
maven { url "http://repo.springsource.org/libs-milestone" }
|
|
maven { url "http://repo.springsource.org/libs-release" }
|
|
}
|
|
|
|
}
|
|
|
|
configure(subprojects) { subproject ->
|
|
apply plugin: "java"
|
|
apply plugin: "groovy"
|
|
|
|
configurations {
|
|
compile.extendsFrom providedCompile
|
|
}
|
|
|
|
[compileJava, compileTestJava]*.options*.compilerArgs = ["-Xlint:unchecked"]
|
|
|
|
project.sourceCompatibility = 1.6
|
|
project.targetCompatibility = 1.6
|
|
|
|
javadoc {
|
|
options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
|
|
options.author = true
|
|
options.header = subproject.name
|
|
//options.overview = "${projectDir}/src/main/java/overview.html"
|
|
}
|
|
|
|
task sourcesJar(type: Jar, dependsOn: classes) {
|
|
classifier = "sources"
|
|
from sourceSets.main.allJava
|
|
}
|
|
|
|
task javadocJar(type: Jar) {
|
|
classifier = "javadoc"
|
|
from javadoc
|
|
}
|
|
|
|
artifacts {
|
|
archives sourcesJar
|
|
archives javadocJar
|
|
}
|
|
|
|
dependencies {
|
|
groovy "org.codehaus.groovy:groovy:$groovyVersion"
|
|
|
|
// Logging
|
|
compile "org.slf4j:slf4j-api:$slf4jVersion"
|
|
runtime "org.slf4j:jcl-over-slf4j:$slf4jVersion"
|
|
runtime "ch.qos.logback:logback-classic:$logbackVersion"
|
|
|
|
// Jackson JSON
|
|
compile "org.codehaus.jackson:jackson-mapper-asl:$jacksonVersion"
|
|
|
|
// Spring
|
|
compile("org.springframework:spring-beans:$springVersion") { force = true }
|
|
compile("org.springframework:spring-context:$springVersion") { force = true }
|
|
compile("org.springframework:spring-core:$springVersion") { force = true }
|
|
compile("org.springframework:spring-orm:$springVersion") { force = true }
|
|
compile("org.springframework:spring-tx:$springVersion") { force = true }
|
|
compile("org.springframework:spring-web:$springVersion") { force = true }
|
|
runtime "cglib:cglib-nodep:2.2.2"
|
|
|
|
// Testing
|
|
testCompile "org.spockframework:spock-core:$spockVersion"
|
|
testCompile "org.spockframework:spock-spring:$spockVersion"
|
|
testCompile "org.hamcrest:hamcrest-library:1.2.1"
|
|
testCompile "org.springframework:spring-test:$springVersion"
|
|
testRuntime "org.springframework:spring-context-support:$springVersion"
|
|
testCompile "org.mockito:mockito-core:1.8.5"
|
|
}
|
|
|
|
}
|
|
|
|
task wrapper(type: Wrapper) { gradleVersion = "1.1" }
|
|
|
|
idea {
|
|
module {
|
|
downloadJavadoc = false
|
|
downloadSources = true
|
|
}
|
|
project {
|
|
ipr {
|
|
withXml { xml ->
|
|
xml.node.component.find { it.@name == "VcsDirectoryMappings" }.mapping.@vcs = "Git"
|
|
xml.node.component.find { it.@name == "ProjectRootManager" }.output.@url = "file://\$PROJECT_DIR\$/build"
|
|
}
|
|
}
|
|
}
|
|
}
|