[英]Mapping JSON response to an abstract type in JAVA rest Service
我正在與一家電子商務公司合作,我正在與3個不同的支付網關集成。 所有這些都需要callbackurl來回發交易狀態。
我已經定義了一個資源來存儲事務的狀態
http://www.api.com/api/users/{userid}/order/{orderId}/payments/{paymentModeId}/paymentStatus
我已經定義了一個名為IPaymentStatusResponse的接口,並創建了3個實現。 根據uri路徑中的paymentModeId,將選擇適當的實現來保持事務狀態。
例如:三個不同的gatewyas的回調網址將看起來像這種支付模式1 - paytm,支付模式2 - payu,支付模式3 cc大道。
http://www.api.com/api/users/300/order/501/payments/1/paymentStatus
http://www.api.com/api/users/300/order/501/payments/2/paymentStatus
http://www.api.com/api/users/300/order/501/payments/3/paymentStatus
方法簽名
public void createPaymentStatus(
@PathParam("paymentModeId") int paymentModeId,
IPaymentStatusResponse response) throws MyAppException {
paymentServiceImpl.createPaymentResponse(response, paymentModeId);
}
這是接近這個的正確方法嗎?
當我發布HTTP帖子時,我收到以下錯誤:
Can not construct instance of com.myapp.dto.payments.IPaymentStatusResponse, problem: abstract types either need to be mapped to concrete types, have custom deserializer, or be instantiated with additional type information
at [Source: org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream@1ee3ab21; line: 1, column: 1]
其他選項,我必須為所有不同的網關定義不同的端點並映射響應對象。
更新:
可以在這里找到一個很好的解釋http://programmerbruce.blogspot.in/2011/05/deserialize-json-with-jackson-into.html
它需要響應json中的一個type元素來選擇具體類。 示例提到json類型和我的界面配置。 這有效。 但不知道如何處理這個因為響應json不在我的控制之下,它來自支付網關提供商
{
"MID":"abc",
"TXNID":"T123",
"ORDERID":"100",
"BANKTXNID":"B123",
"TXNAMOUNT":"1",
"CURRENCY":"INR",
"STATUS":"TXN_SUCCESS",
"RESPCODE":"01",
"RESPMSG":"Txn Success",
"TXNDATE":"2015-12-14 02:10:29.742447",
"GATEWAYNAME":"ICICI",
"BANKNAME":"ICICI",
"PAYMENTMODE":"CC",
"type":"PayTMPaymentResponse",
"CHECKSUMHASH":"ggg"
}
接口
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({ @Type(value = PayTMPaymentResponse.class, name = "PayTMPaymentResponse") })
public interface IPaymentStatusResponse {
}
可以使用一些查詢或路徑參數來實現嗎?
Spring / Jackson無法自動反序列化。 您必須為給定類型提供自定義反序列化程序。 我認為為共享信息和3個策略做一個POJO應該更容易。
如果你使用傑克遜,它應該會有所幫助。 我認為其他libs有類似的東西。 http://wiki.fasterxml.com/JacksonPolymorphicDeserialization
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.