Aunque es seguro declarar un ObjectMapper estático en términos de seguridad de subprocesos, debe tener en cuenta que la construcción de variables Object estáticas en Java se considera una mala práctica. Para obtener más detalles, consulte ¿Por qué las variables estáticas se consideran malas? (y si quieres, mi respuesta )
En resumen, las estadísticas deben evitarse porque dificultan la redacción de pruebas unitarias concisas. Por ejemplo, con un ObjectMapper final estático, no puede intercambiar la serialización JSON por código ficticio o no operativo.
Además, una final estática le impide volver a configurar ObjectMapper en tiempo de ejecución. Puede que no imagines una razón para eso ahora, pero si te encierras en un patrón final estático, nada menos que derribar el cargador de clases te permitirá reiniciarlo.
En el caso de ObjectMapper está bien, pero en general es una mala práctica y no hay ninguna ventaja sobre el uso de un patrón singleton o inversión de control para administrar sus objetos de larga duración.
ObjectMapper
todavía es seguro para subprocesos después de queObjectMapper#setDateFormat()
se llama. Se sabe queSimpleDateFormat
no es seguro para subprocesos , porObjectMapper
lo que no lo será a menos que clone, por ejemplo,SerializationConfig
antes de cada unowriteValue()
(dudo). ¿Podrías desacreditar mi miedo?DateFormat
de hecho está clonado debajo del capó. Buena sospecha allí, pero estás cubierto. :)ObjectMapper
en absoluto ?! Los métodos se nombranwriter()
yreader()
(y algunosreaderFor()
,writerFor()
).mapper.with()
llamada (ya que "con" en Jackson implica la construcción de una nueva instancia y una ejecución segura para subprocesos). Pero con respecto a los cambios de configuración: no se realiza ninguna comprobación, por lo que seObjectMapper
debe proteger el acceso a la configuración . En cuanto a "copy ()": sí, eso crea una nueva copia nueva que puede ser completamente (re) configurada, de acuerdo con las mismas reglas: configúrela completamente primero, luego úsela, y eso está bien. Hay un costo no trivial asociado (ya que la copia no puede usar ninguno de los controladores en caché), pero es la forma segura, sí.