From 5b75dbd792a8d3a43307a962410eadc3b851df57 Mon Sep 17 00:00:00 2001 From: Matthias Kurz Date: Mon, 10 Nov 2025 10:00:22 +0100 Subject: [PATCH 1/2] Use the factory from mapper; now we have setObjectMapper so the factory could change --- .../api/libs/json/jackson/JacksonJson.scala | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/play-json/jvm/src/main/scala/play/api/libs/json/jackson/JacksonJson.scala b/play-json/jvm/src/main/scala/play/api/libs/json/jackson/JacksonJson.scala index 48e7591a..84d30208 100644 --- a/play-json/jvm/src/main/scala/play/api/libs/json/jackson/JacksonJson.scala +++ b/play-json/jvm/src/main/scala/play/api/libs/json/jackson/JacksonJson.scala @@ -281,20 +281,21 @@ private[play] object JacksonJson { private[play] def get: JacksonJson = instance } -private[play] case class JacksonJson(jsonConfig: JsonConfig) { - private val jsonFactory = new JsonFactoryBuilder() - .streamReadConstraints(jsonConfig.streamReadConstraints) - .streamWriteConstraints(jsonConfig.streamWriteConstraints) - .build() +private[play] case class JacksonJson(defaultMapperJsonConfig: JsonConfig) { private var currentMapper: ObjectMapper = null private val defaultMapper: ObjectMapper = JsonMapper - .builder(jsonFactory) + .builder( + new JsonFactoryBuilder() + .streamReadConstraints(defaultMapperJsonConfig.streamReadConstraints) + .streamWriteConstraints(defaultMapperJsonConfig.streamWriteConstraints) + .build() + ) .addModules( new ParameterNamesModule(), new Jdk8Module(), new JavaTimeModule(), new DefaultScalaModule(), - new PlayJsonMapperModule(jsonConfig), + new PlayJsonMapperModule(defaultMapperJsonConfig), ) .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) @@ -313,16 +314,16 @@ private[play] case class JacksonJson(jsonConfig: JsonConfig) { } private def stringJsonGenerator(out: java.io.StringWriter) = - jsonFactory.createGenerator(out) + mapper().getFactory.createGenerator(out) def parseJsValue(data: Array[Byte]): JsValue = - mapper().readValue(jsonFactory.createParser(data), classOf[JsValue]) + mapper().readValue(mapper().getFactory.createParser(data), classOf[JsValue]) def parseJsValue(input: String): JsValue = - mapper().readValue(jsonFactory.createParser(input), classOf[JsValue]) + mapper().readValue(mapper().getFactory.createParser(input), classOf[JsValue]) def parseJsValue(stream: InputStream): JsValue = - mapper().readValue(jsonFactory.createParser(stream), classOf[JsValue]) + mapper().readValue(mapper().getFactory.createParser(stream), classOf[JsValue]) private def withStringWriter[T](f: StringWriter => T): T = { val sw = new StringWriter() From e6d4f14359b1fb36345f2310ce9fe23fb43caf19 Mon Sep 17 00:00:00 2001 From: Matthias Kurz Date: Mon, 10 Nov 2025 10:00:51 +0100 Subject: [PATCH 2/2] Allow play to setConfig --- .../src/main/scala/play/api/libs/json/jackson/JacksonJson.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/play-json/jvm/src/main/scala/play/api/libs/json/jackson/JacksonJson.scala b/play-json/jvm/src/main/scala/play/api/libs/json/jackson/JacksonJson.scala index 84d30208..63a1e7f6 100644 --- a/play-json/jvm/src/main/scala/play/api/libs/json/jackson/JacksonJson.scala +++ b/play-json/jvm/src/main/scala/play/api/libs/json/jackson/JacksonJson.scala @@ -274,7 +274,7 @@ private[play] object JacksonJson { private var instance = JacksonJson(JsonConfig.settings) /** Overrides the config. */ - private[json] def setConfig(jsonConfig: JsonConfig): Unit = { + private[play] def setConfig(jsonConfig: JsonConfig): Unit = { instance = JacksonJson(jsonConfig) }