我正在開(kāi)發(fā)一個(gè)應(yīng)用程序,它調(diào)用外部系統(tǒng)的 REST API 并使用 Jackson 映射響應(yīng)。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()) } }}有沒(méi)有辦法避免每次解析響應(yīng)時(shí)創(chuàng)建JavaTimeModule和實(shí)例?ObjectMapper我無(wú)法在此處自動(dòng)裝配任何 bean,因?yàn)樵搶?duì)象是 DTO 并且我無(wú)權(quán)訪問(wèn) Spring 上下文
1 回答

一只甜甜圈
TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超5個(gè)贊
只需將其拉到頂層即可:
private val mapper = jacksonObjectMapper().also { it.registerModule(JavaTimeModule()) }
@JsonIgnoreProperties(ignoreUnknown = true)
class FetchEmployeeLeavesResponse { ... }
這樣,映射器會(huì)在類(lèi)加載時(shí)創(chuàng)建一次,并且
實(shí)例的所有配置發(fā)生在任何讀取或?qū)懭胝{(diào)用之前
按照文檔的要求。
val mapper或者,如果您有想要在任何地方使用的固定模塊列表,甚至可以創(chuàng)建一個(gè)單獨(dú)的文件來(lái)聲明頂級(jí)并將其導(dǎo)入其他文件中。
添加回答
舉報(bào)
0/150
提交
取消