如何避免创建新的 ObjectMapper 实例,每个来自外部系统的类型响应都被 Jackson

我正在开发一个应用程序,它调用外部系统的 REST API 并使用 Jackson 映射响应。DTO 如下所示:


@JsonIgnoreProperties(ignoreUnknown = true)

class FetchEmployeeLeavesResponse {

    lateinit var leaves: List<EmployeeLeaveType>


    @JsonProperty("response")

    fun unpackNested(response: Map<String, Any>) {

        val employeeLeaves = JSONArray()

        if (response["result"] is List<*>) {

            employeeLeaves.addAll(response["result"] as List<*>)

            val mapper = jacksonObjectMapper()

            mapper.registerModule(JavaTimeModule())

            leaves = mapper.readValue(employeeLeaves.toJSONString())

        }

    }

}

有没有办法避免每次解析响应时创建JavaTimeModule和实例?ObjectMapper我无法在此处自动装配任何 bean,因为该对象是 DTO 并且我无权访问 Spring 上下文


ABOUTYOU
浏览 108回答 1
1回答

一只甜甜圈

只需将其拉到顶层即可:private val mapper = jacksonObjectMapper().also { it.registerModule(JavaTimeModule()) }@JsonIgnoreProperties(ignoreUnknown = true)class FetchEmployeeLeavesResponse { ... }这样,映射器会在类加载时创建一次,并且实例的所有配置发生在任何读取或写入调用之前按照文档的要求。val mapper或者,如果您有想要在任何地方使用的固定模块列表,甚至可以创建一个单独的文件来声明顶级并将其导入其他文件中。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java