我正在开发一个应用程序,它调用外部系统的 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或者,如果您有想要在任何地方使用的固定模块列表,甚至可以创建一个单独的文件来声明顶级并将其导入其他文件中。
添加回答
举报
0/150
提交
取消