我正在使用 Spring(Kotlin) 制作 Web 服務器,并嘗試使用 Jackson 映射 JSON 回應。我需要向其他 API 服務器發送請求,所以我決定使用 OkHttp 發送請求。但是,如果其他 API 服務器回應類似 4XX 的錯誤,Jackson 無法映射回應,因為回應具有不同的 JSON 結構。
這是代碼:
@PostMapping("/test")
fun test(@org.springframework.web.bind.annotation.RequestBody requestJSON: RequestJSON): Message {
val JSON: MediaType = "application/json; charset=utf-8".toMediaType()
val mapper = ObjectMapper()
val requestJSONString: String = mapper.writeValueAsString(requestJSON)
val client = OkHttpClient()
val body: RequestBody = requestJSONString.toRequestBody(JSON)
val request: Request = Request.Builder()
.header("clientid", "blahblah")
.header("secret", "blahblah")
.url("blahblah")
.post(body)
.build()
val response: Response = client.newCall(request).execute()
return mapper.readValue(response.body?.string(), Message::class.java)
}
“訊息”類具有如下結構:
class Message {
var message = NestedMessage()
class NestedMessage {
@JsonProperty("@type")
var type: String? = null
@JsonProperty("@service")
var service: String? = null
@JsonProperty("@version")
var version: String? = null
@JsonProperty("result")
var resultObject = Result()
class Result {
var srcLangType: String? = null
var tarLangType: String? = null
var translatedText: String? = null
var engineType: String? = null
var pivot: String? = null
var dict: String? = null
var tarDict: String? = null
}
}
}
并且,其他 API 服務器的錯誤具有如下結構:
class Error {
var errCode: String? = null
var errMessage: String? = null
}
如何映射不同的 JSON 回應?
uj5u.com熱心網友回復:
您應該為北向 API 和南向 API 創建兩個不同的 Struct。
對于南向 API,將errCode和添加errMessage到 SouthBoundMessage。或者,如果可以,請檢查 HTTP 狀態代碼,然后使用不同的 Jackson 映射器獲取錯誤訊息。
然后將 SouthBoundMessage 轉換為 NorthBoundMessage,這就是你的業務邏輯。
回傳 NorthBoundMessage 和北向 API 使用者的相應 HTTP 代碼。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/437300.html
上一篇:具有陣列輸入的冪級數
