Skip to content

Commit 2e5d1df

Browse files
authored
Merge pull request #170 from mxab/wip/unify-objectmapper
Introduce PerFieldObjectMapperProvider
2 parents 4f7480c + e3a7987 commit 2e5d1df

File tree

4 files changed

+33
-7
lines changed

4 files changed

+33
-7
lines changed

src/main/kotlin/com/coxautodev/graphql/tools/MethodFieldResolver.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,7 @@ internal class MethodFieldResolver(field: FieldDefinition, search: FieldResolver
3838
override fun createDataFetcher(): DataFetcher<*> {
3939
val batched = isBatched(method, search)
4040
val args = mutableListOf<ArgumentPlaceholder>()
41-
val mapper = ObjectMapper().apply {
42-
options.objectMapperConfigurer.configure(this, ObjectMapperConfigurerContext(field))
43-
}.registerModule(Jdk8Module()).registerKotlinModule()
41+
val mapper = options.objectMapperProvider.provide(field)
4442

4543
// Add source argument if this is a resolver (but not a root resolver)
4644
if(this.search.requiredFirstParameterType != null) {
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.coxautodev.graphql.tools
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper
4+
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module
5+
import com.fasterxml.jackson.module.kotlin.registerKotlinModule
6+
import graphql.language.FieldDefinition
7+
8+
class PerFieldConfiguringObjectMapperProvider(
9+
private val objectMapperConfigurer: ObjectMapperConfigurer = ObjectMapperConfigurer { _, _ -> }) : PerFieldObjectMapperProvider {
10+
11+
override fun provide(fieldDefinition: FieldDefinition): ObjectMapper {
12+
return ObjectMapper().apply {
13+
objectMapperConfigurer.configure(this, ObjectMapperConfigurerContext(fieldDefinition))
14+
}.registerModule(Jdk8Module()).registerKotlinModule()
15+
}
16+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.coxautodev.graphql.tools;
2+
3+
import com.fasterxml.jackson.databind.ObjectMapper;
4+
import graphql.language.FieldDefinition;
5+
6+
7+
public interface PerFieldObjectMapperProvider {
8+
ObjectMapper provide(FieldDefinition fieldDefinition);
9+
}

src/main/kotlin/com/coxautodev/graphql/tools/SchemaParserBuilder.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ class SchemaParserDictionary {
225225
}
226226
}
227227

228-
data class SchemaParserOptions internal constructor(val contextClass: Class<*>?, val genericWrappers: List<GenericWrapper>, val allowUnimplementedResolvers: Boolean, val objectMapperConfigurer: ObjectMapperConfigurer, val proxyHandlers: List<ProxyHandler>) {
228+
data class SchemaParserOptions internal constructor(val contextClass: Class<*>?, val genericWrappers: List<GenericWrapper>, val allowUnimplementedResolvers: Boolean, val objectMapperProvider: PerFieldObjectMapperProvider, val proxyHandlers: List<ProxyHandler>) {
229229
companion object {
230230
@JvmStatic fun newOptions() = Builder()
231231
@JvmStatic fun defaultOptions() = Builder().build()
@@ -236,7 +236,7 @@ data class SchemaParserOptions internal constructor(val contextClass: Class<*>?,
236236
private val genericWrappers: MutableList<GenericWrapper> = mutableListOf()
237237
private var useDefaultGenericWrappers = true
238238
private var allowUnimplementedResolvers = false
239-
private var objectMapperConfigurer: ObjectMapperConfigurer = ObjectMapperConfigurer { _, _ -> }
239+
private var objectMapperProvider: PerFieldObjectMapperProvider = PerFieldConfiguringObjectMapperProvider()
240240
private val proxyHandlers: MutableList<ProxyHandler> = mutableListOf(Spring4AopProxyHandler(), GuiceAopProxyHandler(), JavassistProxyHandler())
241241

242242
fun contextClass(contextClass: Class<*>) = this.apply {
@@ -264,7 +264,10 @@ data class SchemaParserOptions internal constructor(val contextClass: Class<*>?,
264264
}
265265

266266
fun objectMapperConfigurer(objectMapperConfigurer: ObjectMapperConfigurer) = this.apply {
267-
this.objectMapperConfigurer = objectMapperConfigurer
267+
this.objectMapperProvider = PerFieldConfiguringObjectMapperProvider(objectMapperConfigurer)
268+
}
269+
fun objectMapperProvider(objectMapperProvider: PerFieldObjectMapperProvider) = this.apply {
270+
this.objectMapperProvider = objectMapperProvider
268271
}
269272

270273
fun objectMapperConfigurer(objectMapperConfigurer: (ObjectMapper, ObjectMapperConfigurerContext) -> Unit) = this.apply {
@@ -287,7 +290,7 @@ data class SchemaParserOptions internal constructor(val contextClass: Class<*>?,
287290
genericWrappers
288291
}
289292

290-
return SchemaParserOptions(contextClass, wrappers, allowUnimplementedResolvers, objectMapperConfigurer, proxyHandlers)
293+
return SchemaParserOptions(contextClass, wrappers, allowUnimplementedResolvers, objectMapperProvider, proxyHandlers)
291294
}
292295
}
293296

0 commit comments

Comments
 (0)