我正在与一家电子商务公司合作,我正在与3个不同的支付网关集成。所有这些都需要callbackurl来回发交易状态。
我已经定义了一个资源来存储事务的状态
http://www.api.com/api/users/{userid}/order/{orderId}/payments/{paymentModeId}/paymentStatus
我已经定义了一个名为IPaymentStatusResponse的接口,并创建了3个实现。根据uri路径中的paymentModeId,将选择适当的实施来保持交易状态。
例如:三个不同网关的回调网址将如下所示 付款方式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 {
}
可以使用某些查询或路径参数实现吗?
答案 0 :(得分:0)
Spring / Jackson无法自动反序列化。 您必须为给定类型提供自定义反序列化程序。 我认为为共享信息和3种策略做一个POJO应该更容易。
如果您使用杰克逊,它应该有用。我认为其他libs有类似的东西。 http://wiki.fasterxml.com/JacksonPolymorphicDeserialization