为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

ABOUTYOU 2023-10-19 21:05:29
我正在开发一个应用程序,它调用外部系统的 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 上下文
查看完整描述

1 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

只需将其拉到顶层即可:


private val mapper = jacksonObjectMapper().also { it.registerModule(JavaTimeModule()) }


@JsonIgnoreProperties(ignoreUnknown = true)

class FetchEmployeeLeavesResponse { ... }

这样,映射器会在类加载时创建一次,并且


实例的所有配置发生在任何读取或写入调用之前

按照文档的要求。


val mapper或者,如果您有想要在任何地方使用的固定模块列表,甚至可以创建一个单独的文件来声明顶级并将其导入其他文件中。


查看完整回答
反对 回复 2023-10-19
  • 1 回答
  • 0 关注
  • 51 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信