我正在使用的客戶端回傳這樣的 json:
[
{
"source": "ANY"
}
]
即物件所在陣列的元素。
我正在嘗試提出這樣的請求:
restTemplate.postForObject<AbcdResponse>(
"/address",
listOf(value).let { JsonHttpEntity(it) }
)
data class AbcdResponse(
val obj: AbcdObject
)
data class DaDataAddress(
val source: String?
)
但我得到了HttpMessageNotReadableException例外:
org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize instance of `com.app.client.abcd.domain.AbcdResponse` out of START_ARRAY token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `com.app.client.abcd.domain.AbcdResponse` out of START_ARRAY token
at [Source: (ByteArrayInputStream); line: 1, column: 1]
如何正確反序列化回應?
uj5u.com熱心網友回復:
正如你可能已經注意到,回應作為一個整體是一個JSON陣列。您可以通過[ ... ]圍繞整個事物的方括號來判斷。
因此,您不能將其反序列化為物件(例如AbcdResponse)。你應該做的是使用List<DaDataAddress>而不是AbcdResponse.
uj5u.com熱心網友回復:
你真的不需要AbcdResponse。您需要的是ParameterizedTypeReference在呼叫服務時使用如下:
restTemplate.exchange("/address",
HttpMethod.POST,
listOf(value).let { JsonHttpEntity(it) },
ParameterizedTypeReference<List<DaDataAddress>>() {})
原因是您正在呼叫的服務正在回傳 JSON 物件的 JSON 陣列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/365268.html
